美文网首页
多态的再理解

多态的再理解

作者: 培根好吃 | 来源:发表于2018-07-31 10:22 被阅读0次

    对象的多种形态

    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
    
    

    相关文章

      网友评论

          本文标题:多态的再理解

          本文链接:https://www.haomeiwen.com/subject/ptucvftx.html