java继承和调用的问题

java的三大要义,封装,继承和多态。
继承中最近我发现了一个有意思的问题。
继承中我能不能用this引用父类的变量?
答案是可以的。

public class TTT {
    public static void main(String[] args) {
    	int i=0;
      
        new Show1().shows(1);
        new Show2().shows2(1);
        
    }
   
}
class Show1{
	int i=0;
	
	public void shows(int i){
		i++;
		this.i++;
		System.out.println("show1"+i);
		System.out.println("show1"+this.i);

	}
}

class Show2 extends Show1{
	public void shows2(int i){

		this.i=100222;

		System.out.println("show1"+i);
		System.out.println("show1"+this.i);

	}
}

那么问题来了?
如果我又用super引用同一个变量会怎么样?
他们是相同还是同一个东西?
结果是改变其中之一另一个也贵随着改变

public class TTT {
    public static void main(String[] args) {
    	int i=0;
      
        new Show1().shows(1);
        new Show2().shows2(1);
        
    }
   
}
class Show1{
	int i=0;
	
	public void shows(int i){
		i++;
		this.i++;
		System.out.println("show1"+i);
		System.out.println("show1"+this.i);

	}
}

class Show2 extends Show1{
	public void shows2(int i){
		i++;
		this.i=100222;
		i=1000;
		super.i=1000;
		System.out.println("show1"+i);
		System.out.println("show1"+this.i);
		System.out.println("show1"+super.i);

	}
}

那么如果我再在子类中从新定义一个同名变量的话

public class TTT {
    public static void main(String[] args) {
    	int i=0;
      
        new Show1().shows(1);
        new Show2().shows2(1);
        
    }
   
}
class Show1{
	int i=0;
	
	public void shows(int i){
		i++;
		this.i++;
		System.out.println("show1"+i);
		System.out.println("show1"+this.i);

	}
}

class Show2 extends Show1{
	int  i=0;
	public void shows2(int i){
		i++;
		this.i=100222;
		i=1000;
		super.i=1000;
		System.out.println("show1"+i);
		System.out.println("show1"+this.i);
		System.out.println("show1"+super.i);

	}
}

结果不一样了,this.i和super.i不在相同并且改变另一个也不会改变另一个。
其实从内存角度出发的话会发现很简单。
因为子类创建一个和父类参数同名的参数是父类会保留自己的内存,同时给子类一个属于自己的内存,所以导致了这个现象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值