【问题标题】:Overriding static methods and polymorphism [duplicate]覆盖静态方法和多态[重复]
【发布时间】:2018-06-18 09:43:03
【问题描述】:

我在某处读到覆盖 static 方法不能 被视为多态性。只是隐藏方法。 “隐藏”是什么意思?


public class TesterClass {
    public static void main(String[] args) {
        ClassLetters.staticM();
        ClassA.staticM();

        ClassLetters Lettersobj = new ClassA();
        ClassA Aobj = new ClassA();


        Lettersobj.staticM();
        Aobj.staticM();
        ClassA aa = (ClassA) Lettersobj;
        aa.staticM();
    }
}

输出:

Static Method Called in CLassLetters
Static Method Called in ClassA
Static Method Called in CLassLetters
Static Method Called in ClassA
Static Method Called in ClassA

classA 继承 ClassLetters 和相同的 static void classM。为什么不是多态?

【问题讨论】:

标签: java polymorphism overriding static-methods


【解决方案1】:

您不能覆盖静态成员,因为它们不是继承的。它们属于类本身,句号。

如果您创建了一个子类,并且您创建了一个具有相同名称/参数/...的(新)静态方法,您不会覆盖原来的方法,而是重新定义一个新方法。

因此,原始类中的静态方法没有被覆盖,而是被隐藏了。

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    相关资源
    最近更新 更多