大学时期觉得面向对象思想之类基础课程没什么卵用,最近维护一些老项目才发现,尼玛,以前觉得没用是因为身边的人基本都会,当你身边的人不会时你就会觉得很有用了。不会面向对象的人要实现多个略有不同的功能时往往是直接copy一个类,可能会原有的类,然后在里面改几句代码就实现了。关键是他们虽然继承了原有的类,但是他们并没有完全合并子类父类的公共代码,短时间内这样是没问题的,甚至效率比规范的继承的略高。但是时间一长这种后果就开始显现出来了,由于项目不断地修改,可能测出上面copy出来的子类有问题,然后就没有修改父类同样的代码。这种问题很隐秘,但是可能会相当致命,在某些情况下会导致程序崩溃。
比如说下面的代码,用Test3继承了Test4的代码,但是继承不够彻底,保留了一个变量 strTest,而在初始化时使用的是子类Test3的变量而不是父类的同名变量,但是调用方法处理的时候由于多态而调用了父类的方法,而父类的方法是使用自己的变量的,这个时候问题就来了,会报空异常。这个问题是因为编码人员不明白多态是针对方法的,不针对变量。
项目里面居然出现了类似的问题,我十分震惊,而且还不少地方时用这中不彻底的继承来写的,看着这几十个危险的炸弹(类),我真心觉得无力吐槽。
<span style="font-size:14px;">public class Test3 extends Test4{ protected String strTest; public Test3() { strTest= "5656687987"; } public static void main(String[] args){ new Test3(). outPutDate(); } } import java.util.Date; public class Test4 { protected String strTest; protected void outPutDate () { try { System. out. println( strTest. length()); } catch (Exception e ) { e. printStackTrace(); } } }</span>
Java基础之面向对象思想的重要性
最新推荐文章于 2022-12-01 20:08:49 发布