标签:父类 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 ; }
标签:父类 image 同名 分享图片 div 编译错误 打印机 java soft
原文地址:https://www.cnblogs.com/lyz-999/p/8746508.html