《三》多态的优势和应用场合
1、什么是多态
多态是同一个属性或行为,具有多种不同表现形式或形态。多态就是同一个类(接口),使用不同的实例而执行不同操作。
2、使用多态的好处
减少类中代码量,提高代码的可扩展性和可维护性,消除类型之间的耦合关系。
3、多态存在的三个必要条件
- 必须是继承关系
- 子类重写父类方法
- 父类引用指向子类对象(向上转型)
4、向上转型
向上转型——子类转换为父类,自动类型转换
语法:
父类名 父类对象 = new 子类名();
注意:
- 向上转型不能使用子类特有的属性和方法,只能引用父类的属性和方法,但是子类重写父类的方法是有效的。
- 向上转型时会优先使用子类中重写父类的方法
- 向上转型的作用是减少重复代码,可以将父类作为参数,这样使代码变得简洁,也更好的体现了多态。
5、向下转型
向下转型——父类转换为子类
向下转型就是指父类类型的对象转型为子类类型。也就是,声明的是子类类型,但引用的是父类类型的对象。
因为向上转型后,父类不能引用子类特有的属性和方法,而使用向下转型后,就可以解决这个问题。
语法:
子类名 子类对象 = (子类名)父类对象;
5.1 什么时候需要用到强制类型转换(向下转型)?
当把子类对象赋给父类引用变量时,这个父类引用变量只能调用父类拥有的方法,不能调用子类特有的方法,即它实际引用的是子类对象。如果需要让这个父类引用变量调用它子类的特有的方法,就必须把它强制转换成子类类型。
把父类实例转换成子类类型,则这个对象必须实际上是子类实例才行,所以向下转型之前一般先向上转型。
在强制转换前使用instanceof运算符判断是否可以成功转换,返回一个布尔值
6、instanceof运算符
当在程序中执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生ClassCastException(类型转换异常),所以在执行向下转型之前需要养成一个良好的习惯,就是判断父类对象是否为子类对象的实例。这个判断通常使用instanceof关键字来完成。可以使用instanceof关键字判断是否一个类实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。
语法:
对象A instanceof 类B
翻译就是:对象A是否为类B的实例,如果是返回true,否则为false