java继承的缺陷_java继承的一些问题

本文探讨了Java中继承和静态变量的关系。当子类继承父类的静态变量时,它们共享同一份值,而成员变量则每个实例各自拥有。在子类中,静态变量不应在初始化块或方法外直接修改,而应在方法内或初始化块中操作。通过示例展示了不同类如何访问和共享父类的静态变量。
摘要由CSDN通过智能技术生成

如果在父类中,你声明了一个静态变量。

2b42a5ee9b9d6faffba2fc645221b054.png

然后你有两个子类继承了这个父类。我们想看看这两个子类调用继承的父类的类变量a是不是同一个值。

这时候注意,我们在子类的时候不能重写static int a = a+2; 因为你一旦 这样重写了,那么这个子类的a肯定就不是父类的那个a了,那么这时候你想得写成a=a+2;但是这时候就有个问题了。你不能在子类中直接写a=a+2,只能在子类的初始化块中写a=a+2或者在方法中使用;不然会出现:

b13306dc2571d94e28632cbff3844884.png

我认为这是因为:使用继承到的父类的变量只能通过 写在{}使用,或者在方法中使用。

所以我们在adda方法中使用,如下图:

641dd48e104481d780ab07b5acca9451.png

01d850fa2b4484dd8f7325531d4e4104.png

通过最终的结果我们可以发现:两个子类继承一个父类(父类中有一个静态变量a),如果两个子类不重写这个变量的话,那么这两个子类的和父类调用的a是同一个a。

。。。。。。。。。。。。。。。。。。。。。。分割线。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

如果在父类中定义了一个成员变量a。

315876f083e6b3b3d78523055b52546e.png

然后我们定义两个子类,看看这两个子类继承的父类中的成员变量是什么情况?我们同样注意在子类的时候不能重写static int a = a+2; 因为你一旦 这样重写了,那么这个子类的a肯定就不是父类的那个a了,并且还是同样得在方法中或者初始化块中使用未重写的从父类继承的a变量。

b2fa3658a929dd1fbc78c0176ed642d2.png

6f9f505a2e19c5b3403fffb324c10f2b.png

我们读完代码会发现:两个子类继承了一个父类(父类中有一个成员变量),那么这两个子类之间关于a是不存在共享关系的。但是每个子类和父类都是共享的同一个值a。(当然前提是你没有在子类中重写a变量,如果重写了,每一个子类与父类也不存在共享a的关系了)。

还有我们最后new Parent().a (这么写是因为在静态变量中不能调用非静态成员变量)看到得到的是5.因为这个新new出来的父类的实例和这两个子类并没有关系。

over~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值