1.多态的分类
(1)编译时多态(设计时多态):方法重载。
(2)运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定调用哪个方法则被称为运行时多态
我们平常说的多态,多指运行时多态
2.多态
向上类型转换(Upcase):将子类型转换为父类型。
隐式/自动类型转换,是小类型到大类型的转换
向下类型转换(Downcase):将父类型转换为子类型。
强制类型转换,是大类型到小类型
通过instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题,提高代码的强壮性。
3.抽象类和抽象方法
应用场景:某个父类只是限定其子类应该包含怎么样的方法,但是不需要准确知道这些子类如何实现这些方法。
注意:
(1)抽象类不能直接实例化
(2)子类如果没有重写父类所有的抽象方法,则也要定义为抽象类
(3)抽象方法所在的类一定是抽象类
4.接口
接口定义了某一批类所需要遵守的规范
接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类必须提供某些方法
语法:
[修饰符] interface接口名 [extends 父接口 1,父接口 2…..]
{
零个到多个常量定义…..
零个到多个抽象方法的定义…..
零个到多个默认方法的定义…..(jdk1.8新增)
零个到多个静态方法的定义……(jdk1.8新增)
}
注意:
接口可以实现多继承,即一个接口可以同时继承多个父接口
实现接口的类如果不能实现所有接口中的待重写的方法,则必须设置为抽象类
一个类可以继承自一个父类,同时实现多个接口
5.内部类
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样得类称为内部类
与之对应,包含内部类的类被称为外部类
内部类的分类
成员内部类
静态内部类
方法内部类
匿名内部类
优势:内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类,更好的实现了信息隐藏。