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

隐藏在Java中的静态方法[重复]

慎望
2023-03-14

当我试着运行这段代码时,它给了我30。有人能解释一下吗!我知道在Java中不能重写静态方法,因为多态性和静态方法不能一起工作。静态方法在类上调用,而不是在实例中调用。但有人能就这个话题做进一步解释吗。我真的不明白为什么我的分数是30而不是10。谢谢

class One {

    static int value = 0;
    One(){
        addValue ();
    }

    static int addValue () {
        return value+=10;
}

    int getValue () {
        return value;

     }

}

class Two extends One {

    Two () {
        addValue ();
    }

    static int addValue () {
        return value+=20;
    }

public static void main(String[] args ) {
    One t = new Two ();
    System.out.println(t.getValue());
}
}

共有3个答案

颛孙俊
2023-03-14

您正在调用两个类的构造函数。所以它会添加10到你的值变量之后,它会调用该类中的Two Constructor和'addValue方法。所以它会给你的值变量再加20。所以答案是30

燕鸿波
2023-03-14

当您在创建第二类的实例时尝试运行这个程序时,在它的构造函数中有一个语句“超级()”,由编译器自动调用超级类构造函数。所以,首先变量value的值是10,然后再增加20。最后它的值是30,你得到的结果。

以下是编译器处理的代码:

Two () {
    super();   // Automatically invoked by compiler
    addValue ();
}
夔庆
2023-03-14

如果构造函数没有显式调用超类构造函数,Java编译器会自动插入对超类无参数构造函数的调用。参考:Oracle doc

如果超级类没有无参数构造函数,您将得到一个编译时错误。Object确实有这样一个构造函数,所以如果Object是唯一的超类,就没有问题了。

在这里,在你的情况下,你调用类的构造函数两个调用类的构造函数默认情况下,有方法调用addValue定义,增加10到value

所以现在value=10。然后,调用类TwoaddValue方法,将20添加到值中。最后,您将得到value=20 10=30作为输出。

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

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

  • 我试图理解重载和重写静态和非静态方法是如何工作的。事实上,我试图理解这些方法如何能够和不能出现在父类和子类中。我想出了下面的规则: 我们不能重写静态方法,只能隐藏它们。通过隐藏,我们的意思是在编译时根据引用变量类型决定执行哪个方法,而不是重写(,在运行时根据实例类型选择哪个方法执行)。 例如,让,然后隐藏. 我们可以重写实例方法。 例如重写. 两个或多个具有相同签名的方法不能以静态或非静态组合形式

  • 为什么输出是"静态A"?

  • 我想知道,非静态方法的用途是什么。我的理解是,静态方法可以直接调用,也可以由类的对象调用,而非静态方法只能由类的一个对象调用。 上述方法可以直接调用,也可以由类的对象调用。那么,我什么时候应该使用非静态方法呢?

  • 问题内容: 我最近发现了一种在Google Guava和Project Lombok中 创建对象的新实例的有趣方法:将构造函数隐藏在静态creator方法后面。这意味着您要做的不是执行操作。 我的问题是为什么?隐藏构造函数有什么好处?在我看来,这样做绝对没有优势,而且似乎违反了基本的对象创建原则。由于开始时您使用而不是某种方法创建对象。这似乎是为了创建方法而创建方法。 您从中得到什么? 问题答案: