今天在论坛上看见网友提问
“抽像类和非抽像类有什么区别!抽像类相对于非抽像类有什么优点!如果可以的话!还想再问一下!什么接口!”
这也是 面试的时候 面试官常提起的问题
我个人总结下
抽象类 顾名思义就是抽象的类,具体(非抽象)类是对对象的抽象,而抽象类是对类的抽象。
抽像类不能定义该类的对象,但可以定义继承他的非抽象类对象。
非抽像类可以定义该类的对象。
优点就是抽象,利于系统的扩展和维护。因为JVM可以在运行时动态决定该使用哪一个继承这个抽象类的具体类。
比如我有个抽象类A,定义了通用的数据库操作(抽象的操作),
类B(用于MySQL)继承类A并且实现了类A的数据库操作方法(用于MySQL的具体的操作)
类C(用于Oracle)也继承类A并且实现了类A的数据库操作方法(用于Oracle的具体的操作)
现在业务逻模块需要对数据库进行操作,我们在业务逻辑操作的时候用抽象类A,而不是具体的类B或C
这样业务逻辑就做到了与具体数据库产品无关。
当我们现在用的数据库是MySQL的时候,我们只需将类B传入业务逻辑模块中。JVM自己会判断对数据库的操作是哪一款数据库产品。
但当我们现在环境变了,是用Oracle的时候,我们也只需将类C传入业务逻辑模块中。
其中业务逻辑代码是并不会被修改的。
当然 接口也有这样的功能,而且接口比抽象类更抽象。抽象类里面还可以定义具体方法,只要子类不覆盖这个方法,那么使用的还是父类的方法逻辑。而接口里面只有方法的声明,具体的方法逻辑由实现接口的类来决定。
1.接口定义了实现接口的类的方法,这算是一种自定义的规范或标准,类必须实现每个接口的方法。
2.接口允许多继承接口,一个类允许实现多个接口。但类必须实现每个接口的方法。弥补JAVA中类之间只能单继承的缺失。
3.实现类级别的多态,也就是说可以定义一个接口,但你要使用哪个实现类可以由自己决定,或程序在运行时
由JVM决定。这是为了设计的解耦,为了系统易于维护和扩展,正如我上面所述。接口比抽象类更抽象。以上的抽象类A也可以定义成接口A
如果要设计出优秀的系统,必须要学会使用好这些东西。OOD经常提起的就是 针对抽象和接口编程
系统需要高内聚 低耦合 易于扩展 和 维护 这些都是良好设计的要求。建议同学们去看下 设计模式 就知道 抽象类和接口的作用了。
以上是我的经验之谈 有什么不对之处 还请 优快云 网友们提出 TKS