Inheritance in Static Methods

时光总嘲笑我的痴心妄想 提交于 2019-11-27 09:05:55

Static methods are resolved on the compile-time type of the variable. m is of type Main, so the method in Main is called.

If you change it to SubMain m ..., then the method on SubMain will be called.

It is because static methods are not polymorphic. Moreover static method should be invoked not by object but using the class, i.e. Main.method() or SubMain.method(). When you are calling m.method() java actually calls Main.method() because m is of type Main.

If you want to enjoy polymorphism do not use static methods.

Eclipse gives me this sort of warning when I try to do this sort of thing:

The static method XXX() from the type XXX should be accessed in a static way

Static methods do not take part in inheritance. The variable is of type Main, so the compiler resolved your function call to Main.method().

For added fun, try setting m to null.

Java performs early binding for static methods, unlike instance methods which are dynamically bound.

Because your object variable is of type Main the call is bound to the superclass implementation at compile time.

A good explanation is available here.

static methods are statically binded with their class name because m is type of Main class then after compilation it would look like as following Main.method(); after compilation of your class run the following command javap -c Main u can see the jvm assembly code for Main class and u would see following m.method //invoke static invoke static ,invoke special tells that static binding invoke special,invoke interface tells that dynamic binding

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!