Java中的静态方法隐藏
Java中的静态方法隐藏
这个问题已经有答案了:
当我尝试运行这段代码时,它给我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()); } }
admin 更改状态以发布 2023年5月23日
如果构造函数没有显式调用超类构造函数,则Java编译器会自动插入对超类的无参数构造函数的调用。 参考: Oracle文档
如果超类没有无参数构造函数,则会出现编译时错误。Object具有这样的构造函数,因此如果Object是唯一的超类,则没有问题。
在您的情况下,您调用类Two
的构造函数,默认情况下调用类One
的构造函数,其中定义了方法调用addValue
,它将10添加到value
。
因此现在value = 10
。之后,调用了类Two
的addValue
方法,在值上添加20
。因此,您最终获得的value=20+10=30
作为输出。