Java中的实例变量


请解释以下行为。
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

这在这里得到了很好的解释

最新更新