Java 为什么';那不早订吗?
这是后期绑定的例子,但当我编译这段代码,然后使用cavaj反编译时 我在ab.java中找到了以下代码:Java 为什么';那不早订吗?,java,late-binding,early-binding,Java,Late Binding,Early Binding,这是后期绑定的例子,但当我编译这段代码,然后使用cavaj反编译时 我在ab.java中找到了以下代码: class a{ void display(){ System.out.println("display1"); } } class b extends a{ void display(){ System.out.println("display1b"); } } class c extends b{ void di
class a{
void display(){
System.out.println("display1");
}
}
class b extends a{
void display(){
System.out.println("display1b");
}
}
class c extends b{
void display(){
System.out.println("display1c");
}
}
class ab {
public static void main(String args[]){
a mn=new c();
mn.display();
}
}
若它是后期绑定,那个么编译器不必知道display()方法来自c类,
但在这里它是已知的,因为它取代了a mn=新的c(); 与
c c1=新的c();
,因此这是早期绑定???请格式化您的代码并遵守命名约定。您使用的是局部变量,以便编译器了解其范围并可以执行这些优化,而这些优化不会影响代码的行为。将
c1
作为属性执行相同的操作,然后检查接下来会发生什么。@SJuan76以及我如何将c1作为属性?您将覆盖显示。因此无需参考a类显示方法。因为c是a的子级。在main
方法之外定义mn
。不要让它成为私人的。无论如何,如果你不知道属性是什么,也许你应该先集中精力学习语言的基础,然后再探索它的本质。
class ab {
ab(){}
public static void main(String args[]){
c c1 = new c();
c1.display();
}
}