Java设计模式 挑战2.1-抽象类和接口的区别

参考来源:https://blog.csdn.net/chenssy/article/details/12858267  感谢原作者!!

1.语法层次

       抽象类可以拥有任意范围的成员数据,同时也可以拥有自己的非抽象方法。但是接口仅能够有静态、不能修改的成员数据,同时它的所有方法必须是抽象的。在某种程度上来说,接口是抽象类的特殊化。

2.设计层次

2.1抽象层次不同

       抽象类是对类的抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

2.2跨域不同

       抽象类所跨域的是具有相似特点的类,而接口可以跨域不同的类。抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同。实现它的子类可以不存在任何关系,共同之处。

       抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在“is-a”的关系,即父类和子类在概念本质上是一样的。对于接口则不然,并不要求接口的实现类和接口在概念本质上是一样的,只需要满足“has-a”的关系即可。

2.3设计层次不同

       抽象类是自下而上抽象而来的,接口是自顶向下设计出来的。

3.总结

1.抽象类在java中表示的是一种继承关系,一个子类只能存在一个父类,但是可以实现多个接口。

2.在抽象类中可以拥有任意范围的成员变量和自己的非抽象方法,在接口中只能存在静态、不能修改的成员变量,而且方法都是抽象的。

3.抽象类和接口所反映的设计理念是不一样的。抽象类反映的是“is-a”的关系,接口反映的是“has-a”的关系。

猜你喜欢

转载自blog.csdn.net/Cary_1029/article/details/84594139