Java中的多态

面向对象三大特性:封装性、继承性、多态性

extends继承或implements实现是多态性的前提

一个对象有多个形态,这就是对象的多态性

1.多态性的格式(Polymorphism)

代码中体现多态性就是一句话:父类应用指向子类对象,简称:左父右子。

类:

父类名称 对象名 = new 子类名称();

接口:

接口名称 对象名 = new 实现类名称();

2.多态中的成员变量

  • 直接通过对象名称访问成员变量:等号左边是谁优先用谁,没有则向上找。(口诀:编译看左边,运行还看左边,仅针对成员变量
  • 间接通过成员方法访问成员变量:该方法属于谁优先用谁,没有则向上找。子类没有覆盖重写,则用父;子类覆盖重写,则用子。

3.多态中的成员方法

  • 成员方法的访问规则:看new的是谁,优先用子类的方法,子类没有则向上找,但无法调用子类特有的方法。(口诀:编译看左边,运行看右边,仅针对成员方法

4.多态的好处

  • 无论右边new的是什么子类,等号左边的类型不变,调用方法不变。

5.对象的向上转型

  • 对象的向上转型就是对象的多态性,右侧创建一个子类对象,把它当做父类来看待。
  • 向上转型从小范围转向了大范围,一定是安全的,类似于基本数据类型的自动类型转换。
  • 对象一旦向上转型为父类,就无法调用子类原本特有的内容

6.对象的向下转型

  • 对象一旦向上转型为父类,就无法调用子类原本特有的内容,解决办法:将对象向下转型,即还原,类似于基本数据类型的强制类型转换。
  • 对象的向下转型就是将父类对象向下还原为本来的子类对象。
  • 格式:
子类名称 子类对象 = (子类名称) 父类对象;
  • 注意:1.要保证对象本来创建的时候就是某一个子类,向下转型的时候还是该子类,才能成功还原。2.如果创建的时候不是某个子类,非要向下转型成为另一个子类,就会报错(ClassCastException)。

7.instanceof关键字

  • 如何才能知道一个父类引用的对象本来是什么子类,格式:
对象名 instanceof 子类名称

这会得到一个boolean值,也就是判断前边的对象能不能作为后边子类的实例。

你可能感兴趣的:(java,java,多态,面向对象编程,类)