静态方法是在Java中继承的吗?

静态方法是在Java中继承的吗?

我在读JavaSCJP认证程序员指南作者:Khalid Mughal。

在继承一章中,它解释了

成员的继承与其声明的可访问性密切相关。如果超类成员可以通过子类中的简单名称访问(而不使用任何额外的语法(例如Super),则该成员被视为继承的。

它还提到静态方法不是继承的。但是下面的代码非常好:

class A{
    public static void display()
    {
        System.out.println("Inside static method of superclass");
    }}class B extends A{
    public void show()
    {
        // This works - accessing display() by its simple name -
        // meaning it is inherited according to the book.
        display();
    }}

我怎么能直接使用display()上课时B?甚至更多,B.display()也很管用。

这本书的解释只适用于实例方法吗?


茅侃侃
浏览 630回答 3
3回答

扬帆大鱼

所有可访问的方法都由子类继承。来自太阳爪哇教程:子类继承父类的所有公共成员和受保护成员,而不管子类在哪个包中。如果子类与其父包位于同一个包中,则它还继承父类的包私有成员。您可以按原样使用继承的成员,替换它们,隐藏它们,或者用新成员来补充它们。继承的静态(类)方法和继承的非静态(实例)方法的唯一区别是,当您编写具有相同签名的新静态方法时,旧的静态方法只是隐藏,而不是覆盖。从页关于覆盖和隐藏之间的区别。隐藏和重写之间的区别具有重要的含义。被调用的重写方法的版本是子类中的版本。被调用的隐藏方法的版本取决于它是从超类调用还是从子类调用。

蓝山帝景

如果书真的这么说,那就错了。这个Java语言规范#8.4.8各国:8.4.8继承、重写和隐藏类C从其直接超类继承超类的所有具体方法m(包括静态方法和实例方法),对于这些方法,以下所有内容都是正确的:M是C的直接超类的成员。M是公共的、受保护的或声明的,在与C相同的包中具有包访问权限。在C中声明的任何方法都没有作为m签名的子签名(§8.4.2)的签名。

狐的传说

您可以体验以下代码的不同之处,这比代码稍作修改。class A {     public static void display() {         System.out.println("Inside static method of superclass");     }}class B extends A {     public void show() {         display();     }     public static void display() {         System.out.println("Inside static method of this class");     }}public class Test {     public static void main(String[] args) {         B b = new B();         // prints: Inside static method of this class         b.display();         A a = new B();         // prints: Inside static method of superclass         a.display();     }}这是由于静态方法是类方法。显示()和显示()将调用各自类的方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java