JAVA中变量继承的问题

来源:blog.csdn.net 更新时间:2023-05-25 21:55

1.先说静态变量(要了解类的生命周期,在类创建时就会在堆内存中开辟单独的空间将所有的静态变量和方法放在一起),静态变量如果在子类或者父类中发生改变就会导致同是继承关系的这个静态变量发生改变。
同是继承关系:类A,类B继承与类A,类C继承与类B,A,B,C是继承关系。
静态变量发生改变时,引起的变化

案例:
//父类
public class A {
	static String age = "改变前";
	
	public void test(){
		System.out.println(age);
	}
}

//子类(这个可以省略,直接类C继承A,为了更加清晰呈现多写一层)
public class B extends A{

}
//子类
public class C extends B{
	public static void main(String[] args) {
		C testc = new C();
		testc.test();
		C.age = "改变后";
		testc.test();
	}
}
结果:
改变前
改变后
 

2.再说非静态变量,类的属性在main方法中使用时,如果子类的非静态变量的值发生改变,父类中的会不会变?

案例:
//父类
public class A {
	String  age = "改变前";
	public A() {
		System.out.println(age);
	}
}
//子类
public class B extends A{
	//这个test方法是为了输出B的父类A中age的值
	public void testB() {
		System.out.println(super.age);
	}
}
//测试类
public class Text{
	public static void main(String[] args) {
		B testb = new B();
		testb.age = "改变后";//这一步改变age的值,但因为age的根地址在A中,相当于改变了A中的age
		//这一步输出B中的age ,age来自B,但A中的地址已经改变,输出11
		System.out.println(testb.age);
		testb.testB();//执行B中的test方法,
	}
}
结果:
改变前
改变后
改变后
 

为什么会输出改变前呢?因为子类会继承父类的构造方法,在实例化操作(类的生命周期)时候会执行本类的构造方法,对B进行实例化操作,执行继承与A的构造方法,会输出age的值。
这时改变B对象中的age值并输出。
再调用B中的testB方法输出B的父类A中age的值。
所以,如果子类的非静态变量继承与父类,子类的变量发生改变父类也会变。当然,父类发生改变,子类也会改变。
非静态变量发生变化时

上一篇:Enum类的介绍和使用 下一篇:单例模式