当前位置: 首页 > 知识库问答 >
问题:

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

子车鸿才
2023-03-14

我的问题是:

>

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

    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个答案

    徐阳炎
    2023-03-14

    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
    

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

     类似资料:
    • 本文向大家介绍C#中的编译时多态是什么?,包括了C#中的编译时多态是什么?的使用技巧和注意事项,需要的朋友参考一下 多态可以是静态的也可以是动态的。在静态多态性中,对函数的响应是在编译时确定的。在动态多态中,它是在运行时决定的。 在编译期间将函数与对象的链接称为早期绑定。也称为静态绑定。C#提供了两种技术来实现静态多态性。它们是函数重载和运算符重载。 在函数重载中,可以在同一作用域中为相同的函数名

    • Test类是超级类,Fest是它的子类,因为我们知道静态方法不能被重写,即使我遇到了“静态方法不能在java中隐藏实例方法”这样的错误,有人能解释一下吗,提前谢谢。

    • null 因为在阅读第一点时,我感觉到为什么特别提到静态方法,而不提到实例方法和构造函数。 谢谢

    • 问题内容: 我确实知道重载和重载之间的语法差异。而且我也知道,重载是运行时多态,重载是编译时多态。但是我的问题是:“重载真的是编译时的多态性吗?方法调用真的在编译时解决了吗?”。为了阐明我的观点,让我们考虑一个示例类。 由于所有方法都是公开的,因此可以全部重写(包括重载的方法),对吗?例如, 现在,考虑以下代码片段: 该方法返回一个随机对象。它可以返回的对象,或者它的任何子类,例如或或任何其他一个

    • 问题内容: 多态是采取多种形式的能力。方法重写是运行时多态。 我的问题是: Java中是否有类似静态多态的东西? 可以将方法隐藏视为一种多态形式吗? 在这个问题的答案中,据说静态方法不是多态的。是什么原因呢? 问题答案: 如果我们运行此测试 如果方法x()是多态的,它将打印B。

    • 我理解不同的行为(与覆盖相比是新的),但不理解术语。

    • 本文向大家介绍什么是运行时多态或动态方法重载?,包括了什么是运行时多态或动态方法重载?的使用技巧和注意事项,需要的朋友参考一下 多态是对象采取多种形式的能力。当使用父类引用来引用子类对象时,会在OOP中最常见地使用多态。被子类覆盖的方法称为运行时多态。JVM确定要在运行时而不是编译时执行的方法。  示例 输出结果