美文网首页
Java的多态

Java的多态

作者: 大红豆小薏米 | 来源:发表于2020-04-26 00:24 被阅读0次
    1. 哪些函数能够调用,取决于reference的类型
    2. 对于被override 的函数,调用哪个版本,取决于object的类型
    3. 如果非要调用reference 没有的类型,可以强制类型转换成object的类型
    class A{
        public String show(D obj){
            return "A and D";
        }
        public String show(A obj){
            return "A and A";
        }
    }
    
    class B extends A{
        public String show(B obj){
            return "B and B";
        }
        public String show(A obj){
            return "B and A";
        }
        // 继承的一个隐形的函数
        //public String show(D obj){
        //    return "A and D";
        //}
    }
    
    class C extends B{}
    class D extends B{}
    
    public class Test{
        public static void main(String[] args){
            A a1 = new A();
            A a2 = new B();
            B b = new B();
            C c = new C();
            D d = new D();
            
            System.out.println("1-"+a1.show(b));
            // "A and A", 因为reference A可以自动匹配b
            
            System.out.println("2-"+a1.show(c));
            // "A and A", 同理
            
            System.out.println("3-"+a1.show(d));
            // "A and D", 就近匹配
            
            System.out.println("4-"+a2.show(b));
            // "B and A", 因为reference是A,匹配的是public String show(A obj), 但是这个在B里被重写,所以是"B and A"
            
            System.out.println("5-"+a2.show(c));
            // "B and A", 同理
            
            System.out.println("6-"+a2.show(d));
            // "A and D"
            
            System.out.println("7-"+b.show(b));
            // "B and B"
            
            System.out.println("8-"+b.show(c));
            // "B and B"
            
            System.out.println("9-"+b.show(d));
            // "A and D", B里面有三个函数的
        }
    }
    

    相关文章

      网友评论

          本文标题:Java的多态

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