码迷,mamicode.com
首页 > 编程语言 > 详细

java中类的三大特征之多态

时间:2018-04-09 00:31:53      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:父类   image   同名   分享图片   div   编译错误   打印机   java   soft   

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中类的三大特征之多态

标签:父类   image   同名   分享图片   div   编译错误   打印机   java   soft   

原文地址:https://www.cnblogs.com/lyz-999/p/8746508.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!