java中类的三大特征之多态
Posted lyz-999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中类的三大特征之多态相关的知识,希望对你有一定的参考价值。
Java 多态
同一种事物由于条件不同,展示出不同的结果,叫做多态。
父类的引用类型,由于使用不同的子类对象实例,而执行不同的操作。
多态存在的三个必要条件
1. 子类继承父类;
2. 子类重写父类方法;
3. 父类引用指向子类对象。 //保证了同一个父类引用类型,使用不同的子类对象实例
比如:
People p=new Chinese(); p.say();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法
以下是多态实例演示:
1 public class Test { 2 public static void main(String[] args) { 3 Person per=new Person(); 4 per.print( new B_And_W_Printer());//多态 5 per.print( new ColorPrinter());//多态 6 } 7
8 }
9 abstract class Printer { 10 11 public abstract void print(); 12 13 } 14 class B_And_W_Printer extends Printer { 15 //重写父类方法 16 public void print() { 17 System.out.println("黑白打印机打印黑白内容"); 18 19 } 20 21 }
22 class ColorPrinter extends Printer { 23 //重写父类方法 24 public void print() { 25 26 System.out.println("彩色打印机打印彩色内容"); 27 28 } 29 30 } 31 class Person { 32 public void print(Printer p){ 33 p.print(); 34 } 35 36 }
执行以上程序,输出结果为:
黑白打印机打印黑白内容
彩色打印机打印彩色内容
Java 父子类转型
⒈ 向上转型:子类转成父类,自动转换
Person p= new Chinese();
特点:
- 绝对安全(不会出错)
- 子类独有的属性和方法将会丢失,只能调用父类中存在的属性和方法。如果父类方法不是抽象方法,那调用时,执行的方法体依旧是子类的。
- 典型应用: 多态中父类引用指向子类对象
⒉ 向下转型: 父类转成子类,强制转换
Person() p=new Person(); Chinese c=(Chinese) p; //ClassCastException 类转换异常,因为p不是Chinese的实例化 对象,强转会造成类转换异常
Person() p=new English(); Chinese c=(Chinese) p; //ClassCastException 类转换异常,因为p不是Chinese的实例化对象,强转会造成类转换异常
Person() p=new Chinese(); Chinese c=(Chinese) p; /因为p是Chinese的实例化对象,可以强制转换
特点:不安全,会造成 ClassCastException 类转换异常,可使用instanceof提前判断
if (p instanceof Chinese){ Chinese c=(Chinese) p ; }
以上是关于java中类的三大特征之多态的主要内容,如果未能解决你的问题,请参考以下文章
Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)