美文网首页
Java多态

Java多态

作者: Lesss | 来源:发表于2019-04-13 17:06 被阅读0次

    多态是同一个行为具有多个不同表现形式或形态的能力
    多态就是同一个接口,使用不同的实例而执行不同操

    • 下面是一个比较经典的题目
    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));
            System.out.println("2--" + a1.show(c));
            System.out.println("3--" + a1.show(d));
            System.out.println("4--" + a2.show(b));
            System.out.println("5--" + a2.show(c));
            System.out.println("6--" + a2.show(d));
            System.out.println("7--" + b.show(b));
            System.out.println("8--" + b.show(c));
            System.out.println("9--" + b.show(d));
        }
    }
    
    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");
        }
    }
    
    class C extends B{
    
    }
    
    class D extends B{
    
    }
    
    • 答案是
    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
    
    • 这个执行顺序非常重要
      优先级由高到低依次为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)

    • 下面基于最复杂的问题4 坐下详细分析
      a2.show(b),a2是一个引用变量,类型为A,则this为a2,b是B的一个实例,于是它到类A里面找show(B obj)方法,没有找到,于是到A的super(超类)找,而A没有超类,因此转到第三优先级this.show((super)O),this仍然是a2,这里O为B,(super)O即(super)B即A,因此它到类A里面找show(A obj)的方法,类A有这个方法,但是由于a2引用的是类B的一个对象,B覆盖了A的show(A obj)方法,因此最终锁定到类B的show(A obj),输出为"B and A”。

    相关文章

      网友评论

          本文标题:Java多态

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