Java中的“君不君,臣不臣,父不父,子不子”

   闲来无事,拿Java来看一下什么叫做君不君,臣不臣,父不父,子不子,没有想到的是,下面这段代码竟然可以编译通过,只是在执行的时候就死得很惨了:

 

  分析一下代码,在类Test实例化的过程中要实例化一个SubTest类,而SubTest类实例化时又要先实例化它的父类Test,类Test实例化时又要实例化一个SubTest类...

  真是“君不君,臣不臣,父不父,子不子”啊。

 

  下面对代码进行一下简单的修改,将Test中的SubTest实例作为一个静态的类属性,代码如下:

  这次可能出乎大家的预料了,这样是可以跑出结果来的,分析一下,应该是第一次实例化Test的时候,会实例化一个SubTest的静态属性,同样,实例化SubTest类时,需要实例化其父类Test,但第二次实例化Test类时将不再实例化类属性SubTest类,因此,不会产生前面的怪圈。

 

  仔细看代码,这当然是个非常不合理的一种设计方式,首先SubTest类是Test类的子类,而Test类中则是存在了对其子类的引用,这样看来,Test类是一个先知了,他可以预先知道对自己做扩展的SubTest类的内容。简单看来,在Test类中有一个SubTest的实例,似乎SubTest应该是Test类的一个“臣”,而SubTest类又是Test类的子类,这样Test和SubTest这两个类似乎不只是“君臣”关系,还有一种“父子”关系,这样会明显给人一种设计不合理的感觉。那么再想一下,我国历代的皇帝与太子又是什么关系呢?Thinking...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值