为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

茅侃侃 2019-06-28 16:50:10
静态方法是在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()也很管用。这本书的解释只适用于实例方法吗?
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

所有可访问的方法都由子类继承。

来自太阳爪哇教程:

子类继承父类的所有公共成员和受保护成员,而不管子类在哪个包中。如果子类与其父包位于同一个包中,则它还继承父类的包私有成员。您可以按原样使用继承的成员,替换它们,隐藏它们,或者用新成员来补充它们。

继承的静态(类)方法和继承的非静态(实例)方法的唯一区别是,当您编写具有相同签名的新静态方法时,旧的静态方法只是隐藏,而不是覆盖。

关于覆盖和隐藏之间的区别。

隐藏和重写之间的区别具有重要的含义。被调用的重写方法的版本是子类中的版本。被调用的隐藏方法的版本取决于它是从超类调用还是从子类调用。


查看完整回答
反对 回复 2019-06-28
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

如果书真的这么说,那就错了。

这个Java语言规范#8.4.8各国:

8.4.8继承、重写和隐藏

类C从其直接超类继承超类的所有具体方法m(包括静态方法和实例方法),对于这些方法,以下所有内容都是正确的:

  • M是C的直接超类的成员。

  • M是公共的、受保护的或声明的,在与C相同的包中具有包访问权限。

  • 在C中声明的任何方法都没有作为m签名的子签名(§8.4.2)的签名。


查看完整回答
反对 回复 2019-06-28
?
狐的传说

TA贡献1804条经验 获得超3个赞

您可以体验以下代码的不同之处,这比代码稍作修改。

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();
    }}

这是由于静态方法是类方法。

显示()和显示()将调用各自类的方法。


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 629 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信