多个子类共享继承自父类的静态(static)属性

我有个需求是:继承自同一个父类的多个子类要继承父类的一个静态属性。(就比如说父类为,有静态属性名字,子类男人女人都要继承名字这个静态属性)
在实际编码中,我发现有趣的现象,多个子类其实是共享父类的静态属性的。具体是什么意思,请看下面我举的一个例子。


首先是类图,父类是AbstractClass,他有两个子类分别是ConcreteClass1,ConcreteClass2
父类有一个静态属性是Form类型的变量。

在这里插入图片描述
两个子类分别对这个继承自父类的静态属性赋值。
ConcreteClass1赋值如下:10 小祝
在这里插入图片描述

public class ConcreteClass1 extends AbstractClass{
		
	
	public ConcreteClass1() {
		this.form = new Form(10, "小祝");
	}
}

ConcreteClass2 赋值如下: 2 小王
在这里插入图片描述

public class ConcreteClass2 extends AbstractClass{
		
	
	public ConcreteClass2() {
		this.form = new Form(2, "小王");
	}
	
}

然后为了验证这两个子类是不是共享父类的这个属性,我们做如下的测试

在这里插入图片描述

public class Client {
	public static void main(String[] args) {
		//创建一个ConcreteClass1子类对象   "小祝",10元
		AbstractClass ac1 = new ConcreteClass1();
		System.out.println(ac1.getFormName()+":"+ac1.getFormMoney());
		//创建一个ConcreteClass2子类对象     "小王",2元
		AbstractClass ac2 = new ConcreteClass2();
		System.out.println(ac2.getFormName()+":"+ac2.getFormMoney());
		System.out.println();
		
		//此时如果他们不共享的话,应该是 "小祝",10元
		System.out.println(ac1.getFormName()+":"+ac1.getFormMoney());
		
	}
	
	
}

可以看出,如果两个子类不是共享同一个父类的属性,那么输出将会是:
在这里插入图片描述

但是实际输出是:
在这里插入图片描述
这说明其实两个子类共有一个静态属性,当一个子类对这个属性进行更改后,另一个子类的该属性也随之更改。


那么如果我的需求是两个子类要有独自不受别的子类影响的继承自父类的属性怎么办?
那就要把父类中的这个属性不能作为静态属性(即去掉static)
在这里插入图片描述
之后再一次测试
在这里插入图片描述
发现两个子类互不影响。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值