接口(Interface)与抽象类(abstract)

接口 (Interface)

在Java 中用 implement 来做。

接口中的方法只有定义,没有实现,而且默认都是public 的形式。

接口中不能定义变量。可以定义常量。

Java中的interface:代码中的 List , Set, Map, Queue 叫做 interface。而后面的 ArrayList, LinkedList 则是这个interface的实现方式。所以前面一定是 List, Set, Map, Queue。后面你想用什么方式实现都可以。

采用interface的原因是,如果一个函数是以 ArrayList 作为传入参数的,那么就不可能接受 LinkedList 作为其参数。所以就需要一个一模一样的函数(除了将传入参数改为 LinkedList)。这样就增大了代码的维护难度。所以就需要一个类似 衣服 一样的东西,将 ArrayList 或者 Linkedlist 包装一下,这样就避免了函数不识别的尴尬处境。

其实接口和抽象类的作用是基本相同的。Java中引入接口的目的是因为Java中继承只能是单一继承。所以如果一个类要实现别的特征的话,必须使用接口来实现。

C++ 中没有接口的原因是,C++ 中的继承是多继承。所以只用抽象类就可以实现所有操作了。

抽象类 (Abstract)

如果将一个类定义为抽象类,则这个类就不能生成一个具体的类。

那么为什么要将一个类定义为抽象类?

当我们认为某个类没有什么具体的意义,其对象都是以含有某些具体特征的类出现时,可以定义为抽象类。

或者子类都会覆盖基类中的方法。那么这些方法在基类中就不需要实现。 

扫描二维码关注公众号,回复: 1780022 查看本文章

抽象类中的抽象方法不需要实现。而且只有抽象类中才有抽象方法,别的类中不能定义抽象方法。即,抽象类中可以有抽象方法和具体方法,但是具体类中不能有抽象方法。

子类中必须实现抽象类中所有抽象方法。

抽象类与接口的区别:

在很多情况下, interface 和 abstract class 是可以互换的。

但是如果用 interface,则不能有实现好的方法。所以当你新定义一个类时,就必须把某一个方法从头到尾都写一边。即使每个子类都会用到这个方法。但是在 Java 8 中,引入了 default 方法。default 方法和 abstract class 中已经实现好的方法的效果是一样的。

在 interface 中所有方法都是public , 如果不想暴露给外部,则需要用 abstract class。

如果一个类要实现很多功能的时候,要用interface。因为继承只能是单继承。比如 LinkedList 既是一个 List,又是一个 Queue。所以 List  Queue只能定义成 interface,不能定义成 abstract class

猜你喜欢

转载自blog.csdn.net/chichiply/article/details/80700261