java中的method override和variable hide

昨天跟朋友讨论到一个有趣的问题:java中variable有没有override?

真是惭愧啊,到现在才知道原来java中的override只是针对method来讲的,对于变量是hide.

闲言少叙,先上两段代码:

public class Base {
public int x=1;
public void echo(){
	System.out.println(x);
}
}

public class Sub extends Base{
    public int x=2;
 
	public static void main(String[] args) {
		Sub sb=new Sub();
		Base bs=new Base();
		sb.echo();
		bs.echo();
		System.out.println(bs.x+"");
        System.out.print(sb.x+"");
	}

}

 猜猜结果是啥?

 是

1
1
1
2

呵呵,可以看到变量并没有override.

如果做一下改变,在Sub里面override echo方法,并且与Base的一模一样,再运行,结果是什么呢?

public class Sub extends Base{
    public int x=2;
    public void echo(){
    	System.out.println(x);
    }
	public static void main(String[] args) {
		Sub sb=new Sub();
		Base bs=new Base();
		sb.echo();
		bs.echo();
		System.out.println(bs.x+"");
        System.out.print(sb.x+"");
	}

}

 呵呵,结果是:

2

1

1

2

 

不过话说回来,我觉得除非真的被逼无奈,不然不要在一个hierachy下面定义名字重复的变量,否则很容易出现“潜伏”的问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值