Java中的方法中,只有private、static和final修饰的方法以及构造方法是静态绑定,其他的方法全部为动态绑定。
动态绑定是多态的一种,那么,没有子类的类中的一个非private、static、final方法,也就是一个普通方法,这个方法也是动态绑定的吗?那它动态绑定的意义在哪里呢?这种方法不是在编译期就可以确定它只能被本类对象调用了吗?
要分清动态绑定和静态绑定的概念,我理解如果方法没有重写,是不存在动态绑定的,就像你说的编译期就确定了。
可以参考这个博客
https://blog.csdn.net/weixin_36421759/article/details/114064117
什么都不写默认是default,同一包内可见
所以并非只有本类可调用
类方法是属于整个类的,所以类方法的方法体中不能有与类的对象有关的内容。
即类方法体有如下限制:
1.类方法中不能引用对象变量;
2.类方法中不能调用类的对象方法;
3.类方法不能被覆盖(重写);
4.在类方法中不能调使用super,this关键字;
对于Java中没有任何子类的类中的普通方法来说,它同样也是动态绑定的。动态绑定的意义在于可以在运行时确定调用哪个对象的方法,尽管在编译期可能无法确定。以下是解决该问题的步骤:
确认Java中哪些方法是静态绑定,哪些方法是动态绑定。在Java中,只有private、static和final修饰的方法以及构造方法是静态绑定的,其他的方法全部为动态绑定。
建立一个没有任何子类的类,并在其中添加一个非private、static、final方法。例如:
public class MyClass { public void myMethod() { System.out.println("This is myMethod."); } }
public static void main(String[] args) { MyClass myObj = new MyClass(); myObj.myMethod(); }
运行程序,可以看到输出为"This is myMethod.",说明myMethod是动态绑定的,即在运行时确定调用哪个对象的方法。