为了账号安全,请及时绑定邮箱和手机立即绑定

虚心求教!关于引用和子类改变父类属性的问题

Transp是父类,Bus和Plane是子类。

Transp类中有一属性int num,在Bus和Plane中分别赋值为20和200

在主函数中这样引用

Plane plane=new Plane();

Transp bus=new Bus();

接着

System.out.println("plane.num="+plane.num+" ");

System.out.println("bus.num="+bus.num+" ");

结果为

plane.num=200 

bus.num=0 

这里引用不同导致结果不同,bus.num=0因为在父类中num没赋值默认为0同时意味着是调用的父类的num,plane.num=200调用的是Plane类中的重写后的属性。但是原因不清楚,在引用,父类,子类,对象这些词语的关系究竟是什么呢??

正在回答

3 回答

但是接下来我说的就是一个小重点--->在继承当中,子类继承父类的属性和继承方法的方式上有所差别

--->父类属性不可被重写,只会被调用,父类方法可以被重写,也可以被调用


1 回复 有任何疑惑可以回复我~

Transp bus=new Bus();  这个你是父类引用所以等于0

Plane plane=new Plane();这个你是子类引用所以等 于200,这两句一个父类引用,一个子类引用所以结果不一样

1 回复 有任何疑惑可以回复我~

public class Transp {
	int num;
}




public class Plane extends Transp{

	int num = 200;
}




public class Bus extends Transp{

	int num = 20;
	
	public void walk() {
		System.out.println("gogogogogogogo....");
	}
}





public class Test {

	public static void main(String[] args) {
		
		Plane plane = new Plane();
		
		
		Transp bus = new Bus();
		
		Bus bus2 = (Bus)bus;
		System.out.println(plane.num);
		System.out.println(bus.num);
		System.out.println(bus2.num);
	}

}


DEBUG 调试 发现 bus 和 bus2指向同一个内存地址,但输出的结果则是 0   20 

原因不明。初学




0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

虚心求教!关于引用和子类改变父类属性的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信