多态的分类
- 编译时多态(设计时多态):方法重载;
- 运行时多态:JAVA运行时根据调用该方法的实例的类型来决定调用哪个方法则被称为运行时多态;
- 平时说的多态,多指运行时多态。
多态
- 向上类型转换(Upcast):将子类型转换为父类型,隐式/自动类型转换,是小类型到大类型的转换;
- 向下类型转换(Downcast):将父类型转换为子类型,强制类型转换,是大类型到小类型;
- 通过instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题,提高代码的强壮性。
抽象类&抽象方法
- 应用场景:某个父类知识限定其子类应该包含怎样的方法,但不需要准确知道这些子类如何实现这些方法。
抽象类
public abstract class Animal{
}
public abstract void eat();
- 注意:
- 抽象类不能直接实例化;
- 子类如果没有重写父类所有的抽象方法,则也要定义为抽象类;
- 抽象方法所在的类一定是抽象类;
- 抽象类中可以没有抽象方法。
接口
- 接口定义了某一批类所要遵守的规范;
- 接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定1这些类里必须提供某些方法。
- 语法:
{
}
- 注意:
- 接口可以实现多继承,即一个子接口可以同时继承多个父接口;
- 实现接口的类如果不能实现所有接口中待重写的方法,则必须设置为抽象类;
- 一个类可以继承自一个父类,同时实现(
implements
)多个接口。
内部类
- 在Java中,可以将一个类定义在另一类里面或者一个方法里面,这样的类称为内部类;
- 与之对应,包含内部类的类被称为外部类;
- 优势:内部类提供了更好地封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类,更好地实现了信息隐藏。
内部类的分类