多态性
- 多态性,是面向对象中最重要的概念,在Java中有两种表现:
- 方法的重载(overload)和重写(overwrite)
- 对象的多态性–可以直接应用在抽象类和接口上。
- 多态出现
- 前提
- 需要存在继承或者实现关系
- 要有覆盖操作
- 成员方法
- 编译时类型:由声明该变量时使用的类型决定,要查看引用变量所属的类中是否有调用的方法。
- 运行时类型:由实际赋给该变量的对象决定,调用时机对象所属的类中的重写方法。
若编译时类型和运行时类型不一致,就会出现多态(Polymorphism)。
- 成员变量
- 不具备多态性,只看引用变量所属的类。
- 前提
- 对象的多态
在Java中,子类的对象可以代替父类的对象使用- 一个变量只能有一种确定的数据类型
- 一个引用类型变量可能指向(引用)多种不同类型的对象
- 子类可以看作是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型
- 一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法
- 若子类重写类父类方法,就意味着子类里定义的方法彻底覆盖了父类里的同名方法,系统将不可能把父类里的方法转移到子类中。
- 对于实例变量不存在这样的现象,即使子类里定义了与父类完全相同的实例变量,这个实例变量依然不可能覆盖父类中定义的实例变量
- instanceof操作符
x instanceof A:检验x是否为类A的对象,返回值为boolean型- 要求x所属的类与类A必须是子类和父类的关系,否则编译错误
- 如果x属于A的子类B,x instanceof A值也为true