首页 > 编程语言 > 详细

Java多态

时间:2020-11-22 14:08:12      阅读:28      评论:0      收藏:0      [点我收藏+]

Java多态

  • 首先来看一个经典的例子

    public class Polymorphic {
        class A {
            public void show(D obj) { System.out.println ("A show D"); }
            public void show(A obj) { System.out.println ("A show A"); }
        }
        class B extends A {
            public void show(B obj) { System.out.println ("B show B"); }
            public void show(A obj) { System.out.println ("B show A"); }
        }
        class C extends B {}
        class D extends B {}
      
        public static void main(String[] args) {
            Polymorphic polymorphic = new Polymorphic();
            A a = polymorphic.new A();
            A a_b = polymorphic.new B();
            B b = polymorphic.new B();
            C c = polymorphic.new C();
            D d = polymorphic.new D();
            a.show(a);   // A show A
            a_b.show(a); //① B show A
            a_b.show(b); //② B show A
            a_b.show(c); //③ B show A
            a_b.show(d); //④ A show D
        }
    
    
    }
    
  • 原因

    java多态的理解
    首先,要看a_b被声明为A类型即用父类型声明变量。所以a_b是按照A类型进行编译链接和调用的,
    即a_b对象只有show(A) show(D)两个公开方法,且show(A)是被实际类型B进行覆盖的。
    
    a_b.show(a); //① B show A       按照show(A)调用覆盖的方法。
    a_b.show(b); //② B show A       按照show(A)调用覆盖的方法。因为show(B)方法不可见。
    a_b.show(c); //③ B show A       按照show(A)调用覆盖的方法。因为show(C)不存在show(B)方法不可见。
    a_b.show(d); //④ A show D       按照show(D)调用父类方法。
    

Java多态

原文:https://www.cnblogs.com/libai2020/p/14019015.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!