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

为什么不可能在子类中有一个静态方法,它的签名与父类中的签名相同?[副本]

林哲茂
2023-03-14

为什么不可能在子类中有一个静态方法,它的签名与父类中的签名相同?

class Parent {
    public final static void fun() {
        System.out.println("parent");
    }
}

public class Child extends Parent {        
    // doesn't compile! 
    public static void fun() {
        System.out.println("child");
    }
}

我只是想知道为什么他们允许在这里使用final修饰符?我们都知道静态方法属于一个类而不属于对象,所以不可能在子类中重写方法。所以对于我来说final在这里是多余的。

共有1个答案

呼延光明
2023-03-14

您将该方法声明为final,这意味着您密封了它。子类无法重新定义final方法。根据Oracle,

在方法声明中使用final关键字指示子类不能重写该方法

 类似资料:
  • 为什么我的子类方法不重写其父类中相同签名的方法? 我有一个类,它扩展了一个抽象类,后者扩展了抽象类Actor(这里的上下文是一个pong游戏)。和都有一个具有相同签名的方法: 目的是让方法重写的方法。这里的问题是,当我在内部调用时,只调用的方法。 在中的上设置的断点会脱扣,而在中的上设置的断点从不脱扣。我还在方法上尝试了,但它仍然调用方法。 目标是让对象以与其他对象不同的速度上下移动。因此方法也会

  • C#提供了函数重载时使用的以下签名特性。 我们知道,对于重载,只考虑参数;它们的数量和类型,但多态性的目标是根据调用策略提供相同的名称,但不同的用法。 如果我有一个类包含两个具有相同名称和签名的方法,而一个是静态的,另一个不是,C#编译器抛出一个错误;"类已经定义了一个名为'foo'的成员,具有相同的参数类型"。对这两个方法的调用将是不同的;一个带有对象名,一个带有类名的静态方法。因此,调用策略没

  • 我有以下场景: 以下是我的问题: 如果中的静态方法是公共的,则编译错误将为: 静态方法m1()与I中的抽象方法冲突。 因此,当访问修饰符是默认值时,它试图隐藏,而当它是公共的时,它是冲突的。为什么会有这样的区别呢?背后的理念是什么?

  • 我最近开始学习Java,目前正在研究多态性。考虑下面的代码: 在执行这段代码时,我发现sides()方法不能被重写。我理解在重写中,方法名和返回类型应该相同,但在本例中返回类型不同。那么,有没有办法执行它而不导致重写,但保持相同的名称和不同的类型?

  • 问题内容: 最近,我正在使用一些简单的Java代码,这些方法使用一些方法来快速测试我编写的代码。我最终遇到了两门相似的课: 我对代码停止编译感到惊讶,而Eclipse对此表示抱怨。 好吧,这两种方法都是静态的,并且其中的函数只是对中的一种隐藏,因此我认为它们之间完全没有关系。在静态方法中,我们没有多态性,并且该调用在编译期间绑定到具体的方法实现,因此,我无法理解为什么in 不能抛出在签名中未声明的

  • 我在一次面试中被问到以下问题: 问题:名称和签名相同但返回类型不同的方法。他问我,可能吗?这种类型叫什么。 有人能告诉我以下情况吗: > 上面的事情在任何情况下都是可能的(至少像一个在基类中,一个在派生类中?)如果是,是什么类型?比如编译或运行时多态? 在编译时多态性中,如果方法的返回类型与签名也不同,该怎么办?但只有函数的名称是相同的。还是编译时多态性吗? 在重写中,如果我有不同的返回类型,但方