请解释以下行为。
class Base
{
public int num = 3;
public int getNum()
{
return num;
}
public void setNum(int num)
{
this.num = num;
}
}
class child
extends Base
{
public int num = 4;
public child()
{
}
public child(int i)
{
this.num = i;
}
public int getNum()
{
return num;
}
public void setNum(int num)
{
this.num = num;
}
}
public class Main
{
public static void main(String[] args)
{
Base obj2 = new child();
System.out.println(obj2.num);
System.out.println(obj2.getNum());
Base obj3 = new child(10);
System.out.println(obj3.num);
System.out.println(obj3.getNum());
}
}
输出:3.4.3.10
在这里,obj2.num和obb3.num仍然指向基类实例变量中指定的值3。它不会像obj2.getNum((和obj3.getNum(
提前谢谢。
因为对象是用超类类型声明的,所以可以获得超级成员变量值。
如果对象是用子类类型声明的,则该值将被重写。
如果将Base obj3 = new child(10);
修改为child obj3 = new child(10);
,则输出为3 4 10 10
这在这里得到了很好的解释