接口中不允许方法的实现,而抽象类是允许方法实现的及定义变量的,因此我们可以看出接口是比抽象类更高层次的抽象。如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为(例如set()方法)来修改属性。那么有些人就会提出可以通过实现接口的类的实例来修改接口的属性。那好,如果接口中有一变量c,我们通过实现它的A类对象改变了c的值,那么实现接口的B类,C类中的c变量都要跟着改变,可想而知这样就会造成混乱,很多想要实现接口的类就不知道接口里现在c变量到底是什么值,因为接口是在变的,它不再是那种高层的抽象,而是带了可变的成分。所谓的抽象就是把一些不可变的东西放在一起,而可变的东西往往放在实现里面。所以我们深思接口的本意所在,实际上它是对一类事物属性和行为的高层次抽象,它体现的是OCP(对修改关闭,对扩展开放)原则,这也是我们软件开发中一直所追求。 |