《三》多态

《三》多态的优势和应用场合

1、什么是多态

多态是同一个属性或行为,具有多种不同表现形式或形态。多态就是同一个类(接口),使用不同的实例而执行不同操作。

 

2、使用多态的好处

减少类中代码量,提高代码的可扩展性和可维护性,消除类型之间的耦合关系。

 

3、多态存在的三个必要条件

  1. 必须是继承关系
  2. 子类重写父类方法
  3. 父类引用指向子类对象(向上转型)

 

4、向上转型

向上转型——子类转换为父类,自动类型转换

语法:

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

注意:

  • 向上转型不能使用子类特有的属性和方法,只能引用父类的属性和方法,但是子类重写父类的方法是有效的。
  • 向上转型时会优先使用子类中重写父类的方法
  • 向上转型的作用是减少重复代码,可以将父类作为参数,这样使代码变得简洁,也更好的体现了多态。

 

5、向下转型

向下转型——父类转换为子类

向下转型就是指父类类型的对象转型为子类类型。也就是,声明的是子类类型,但引用的是父类类型的对象。

因为向上转型后,父类不能引用子类特有的属性和方法,而使用向下转型后,就可以解决这个问题。

语法:

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

 

5.1 什么时候需要用到强制类型转换(向下转型)?

当把子类对象赋给父类引用变量时,这个父类引用变量只能调用父类拥有的方法,不能调用子类特有的方法,即它实际引用的是子类对象。如果需要让这个父类引用变量调用它子类的特有的方法,就必须把它强制转换成子类类型。

把父类实例转换成子类类型,则这个对象必须实际上是子类实例才行,所以向下转型之前一般先向上转型。

在强制转换前使用instanceof运算符判断是否可以成功转换,返回一个布尔值

 

6、instanceof运算符

当在程序中执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生ClassCastException(类型转换异常),所以在执行向下转型之前需要养成一个良好的习惯,就是判断父类对象是否为子类对象的实例。这个判断通常使用instanceof关键字来完成。可以使用instanceof关键字判断是否一个类实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。

语法:

对象A instanceof 类B

翻译就是:对象A是否为类B的实例,如果是返回true,否则为false

 

posted on 2020-06-03 11:25  北冥道人骑鲲打代码  阅读(136)  评论(0编辑  收藏  举报

导航