多态的再理解

对象的多种形态

1.引用形态

父类的引用可以指向本类的对象

父类的引用可以指向子类的对象

Animal d=new Animal();

Animal d2=new Dog(); //父类变量不能引用子类的对象

但是Dog d2=new Animal();就是错的 子类变量不能引用父类的对象

2.方法多态

创建本类对象时,调用的方法为本类方法

创建子类对象时,调用的方法为子类重写的方法或者继承的方法

public class Cat extends Animal {

}

public class Initial {

public static void main(String[] args) {

Animal d=new Animal();

Animal d2=new Dog();

Animal d3=new Cat();

d.eat();

d3.watchddor();// 这是不行的 ,因为watchdoor是子类专有的方法

d3.eat();//虽然d3 cat类里面什么也没有,但是因为多态的原因 它会调用父类的方法

}

}


publicclassA{

publicStringshow(D obj){

return("A and D");

        } 



publicStringshow(A obj){

return("A and A");

        } 



    } 



publicclassBextendsA{

publicStringshow(B obj){

return("B and B");

        } 



publicStringshow(A obj){

return("B and A");

        } 

    } 



publicclassCextendsB{



    } 



publicclassDextendsB{



    } 



publicclassTest{

publicstaticvoidmain(String[] args){

A a1 =newA();

A a2 =newB();

B b =newB();

C c =newC();

D d =newD();



System.out.println("1--"+ a1.show(b));

System.out.println("2--"+ a1.show(c));

System.out.println("3--"+ a1.show(d));

System.out.println("4--"+ a2.show(b));//4--B and A .首先a2是A引用,B实例,调用show(B b)方法,此方法在父类A中没有定义,所以B中方法show(B b)不会调用(多态必须父类中已定义该方法),再按优先级为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O),即先查this对象的父类,没有重头再查参数的父类。查找super.show((super)O)时,B中没有,再向上,找到A中show(A a),因此执行。

System.out.println("5--"+ a2.show(c));//同上

System.out.println("6--"+ a2.show(d));//A and D .查找B中没有show(D d)方法,再查A中,有,执行。

System.out.println("7--"+ b.show(b));

System.out.println("8--"+ b.show(c));//B and B .

System.out.println("9--"+ b.show(d));

        } 

    }


1--A and A

2--A and A

3--A and D

4--B and A

5--B and A

6--A and D

7--B and B

8--B and B

9--A and D

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,263评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,091评论 0 4
  • 多态就是对象的多种形态,即相同的消息使得不同的类做出不同的响应。 多态存在的三个必要条件:继承、重写、父类变量引用...
    予别她阅读 454评论 0 0
  • 一.成员变量与局部变量的区别 成员变量:在类中定义,用来描述对象将要有什么(属性)。可被本类方法和其他跟当前类有关...
    jeffierw阅读 559评论 0 0
  • 满眼望去,那一树一树的桃花正热闹地开放,我忽然发现,原来同一棵树上的花儿也是千姿百态,形态各异,树干上的花儿盛开得...
    官小姐不当官阅读 244评论 0 0