提问者:小点点

为什么方法隐藏也是编译时多态性的一个例子?[重复]


我的问题是:

>

  • 为什么方法隐藏也是编译时多态性的一个例子,而它没有被覆盖?相关代码:

    class A{
        public static void print(){
            System.out.println("class A");
        }
    }
    public class B extends A{
        public static void print(){
            System.out.println("class B");
        }
    
        public static void main(String[] args){
            A a = new B();
            a.print();     //class A
            B b = new B();
            b.print();    //class B
        }
    }
    

    如果方法隐藏也是编译时多态性的一个例子,那么为什么变量隐藏不是编译时多态性的一个例子,而像方法隐藏这样的变量隐藏没有被覆盖和多态?

    对不起,我的英语很差。


  • 共1个答案

    匿名用户

    https://byjus.com/gate/difference-between-compile-time-and-run-time-polymorphism-in-java

    问:什么是编译时多态性?

    A: 编译时多态性是通过方法重载获得的。术语方法重载允许我们有多个同名的方法。由于这个过程是在编译时执行的,所以它被称为编译时多态性。

    您的代码不会按原样编译。下面是一个替代版本:

    乙.java:

    class A{
        public static void print(){
            System.out.println("class A");
        }
    }
    public class B extends A{
        public static void print(){
            System.out.println("class B");
        }
    
        public static void main(String[] args){
            A a = new A();
            a.print();
            B b = new B();
            b.print();
            A c = new B();
            c.print();
            //System.out.println(a.a);
        }
    }
    

    输出:

    class A
    class B
    class A
    

    你会注意到:

    • A.print()=

    现在让我们尝试一个不同的例子,没有“静态”:

    class A2{
        public void print(){
            System.out.println("class A2");
        }
    }
    public class B2 extends A2{
        public void print(){
            System.out.println("class B2");
        }
    
        public static void main(String[] args){
            A2 a = new A2();
            a.print();
            B2 b = new B2();
            b.print();
            A2 c = new B2();
            c.print();
            //System.out.println(a.a);
        }
    }
    

    输出:

    class A2
    class B2
    class B2
    

    这是运行时多态性的一个例子。