根据引用变量类型,这段代码的结果是不同的,这是否意味着变量(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);
}
}
发布于 2021-02-14 08:26:08
这不仅仅是像static
或dynamic binding
那样。在Java中没有fields
的polymorphism
,只有methods
的。
变量决策总是在compile-time
中做出。
因此,在upcasting
基类期间,将采用变量。
发布于 2021-02-14 08:24:59
您声明的变量m
的类型为A
,因此输出将为10
。相反,如果您已经将m
初始化为Main m = new Main();
,那么输出应该是30
。这是因为,该对象的类型为Main
,并且由于Main
也有一个字段a
,因此这将覆盖父字段a
。
发布于 2021-02-14 08:26:00
你有两个对象的类型(A, Main
),它们对变量a
都有自己的含义,所以当你的变量m的类型是A
时,你会得到值10
,如果变量m的类型是Main
,你就会得到值30
。
https://stackoverflow.com/questions/66193536
复制相似问题