继承问题


package jichengyc;


public class Main {

 public static void main(String[] args)
    {
       a x = new a();
      // System.out.println(x.i);
       //x.getvalue();
       a y = new aa();
       //y.getvalue();
       System.out.println("x中的i值:"+x.i);
       System.out.println("y中的i值:"+y.i);
    }

}
class a
{
    public int i ;
    public a()
    {
        //System.out.println("a: "+i);
        i = 5;
       // System.out.println("a: "+i);
    }
    public void  getvalue()
    {
        System.out.println(i);
    }       
}
class aa extends a
{
    public int i;
    public aa()
    {   
        //System.out.println("aa: "+i);
        i = 6;
        //System.out.println("aa: "+i);
    }
    public void  getvalue()
    {
        System.out.println(i);
    }
}


结果为 :
x中的i值:5
y中的i值:5



为什么 y的值为5 不是 6

下面是解释:

在继承中,用对象或者this.调方法与调用属性是不同的,楼主你只要熟记:
父引用(此时必须是子对象)调 重写的member方法时,是调子类的member方法,
父引用(此时必须是子对象)调 重写的static方法时,是调父类的static方法,
父引用(此时必须是子对象)调 属性(不管是member属性还是static属性),是调父类的属性。

父引用(装父对象)调方法和属性时就只能调父类的,不能调子类的。

this.  member方法时 也是找子类的重写方法,
this.  static方法时  调的是书写这个 "this." 类区的static方法,
this.  属性(不管是member还是static)都是调的是书写这个 "this." 类区的static方法,

你的y是个父引用(装子对象) 此时y.i  就是调父类class A{}里的i,所以输出是1



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值