JAVA:变量使用静态绑定还是动态绑定?



这段代码的结果取决于引用变量的类型,这是否意味着变量(int a)以静态方式有界

class A{
int a = 10;
}
public class Main extends A {
int a = 30;         
public static void main(String[] args){             
A m = new Main();
System.out.println("A : " + m.a);
}
}

这与staticdynamic binding不同。Java中fields没有polymorphism,只有methods

变量的决定总是在compile-time

因此,在upcasting基类期间变量将被占用。

您声明的变量mA类型,因此输出将是10。相反,如果将m初始化为Main m = new Main();,那么输出将是30。这是因为,对象的类型是Main,因为Main也有一个字段a,这将覆盖父字段a

你有两个对象的类型(A, Main),它们对变量a都有自己的含义,所以当你的变量m的类型是A时,你会得到值10,如果变量m的类型是Main,你会得到值30

相关内容

  • 没有找到相关文章

最新更新