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三大特征:封装 继承 多态

Java面向对象三大特征之继承和多态

Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)

面向对象三大特征之继承,多态

面向对象三大特征之继承

python面向对象三大特性之继承多态