我们有像
这样的东西List lst = new LinkedList();
表明List是某种类。那么,为什么称它为接口?我们可以简单地将其称为实现Collection的抽象类。
答案 0 :(得分:8)
接口和抽象类用于不同的目的。请参阅this question。
List定义了我们希望列表类型对象具有的一组行为,而不是数据结构层次结构的基础。它不需要指定任何共享行为或类似的东西。它只是简单地说“所有想要称之为List的东西应该能够做这些事情”
答案 1 :(得分:0)
如果某个类已经在扩展另一个类,则无法在您的情况下扩展List。
基本上你必须理解difference between abstract class and interface。
或者您可以阅读Effective Java中的第18项以便更好地理解。
答案 2 :(得分:0)
列出lst = new LinkedList();
此处列表是一种类型的集合,其属性与其他集合类型不同。 LinkedList是使用自己的数据结构作为LinkedList实现这些List属性。 ArrayList是另一种以自己的方式实现相同属性的数据结构。
收集是100%抽象。不同类型的集合具有不同的属性。 例如 列表是A 集合,其属性为允许复制。订单很重要。等等 设置是A 集合,其属性为不允许复制。订单可能不重要等
因为在不同的Collection类型中不需要通用的实现逻辑,所以不需要创建Abstract Class。
另外 List lst = new LinkedList(); 提供运行时多态性的一些好处。 您可以使用一些代码将参数作为List,例如进程(List lst)。 这里可以通过传递LinkedList或ArrayList等来使用相同的代码。 让我不详细说明。
浏览Oleksi指定的Interface和Abstract Class之间的区别。 此外,我想简化一些事情。 OOP中的主要概念是抽象,这是概括的概念。人是动物。动物是生活的东西。现在Living Thing是最高级别的抽象。 这里指出的是,在接口抽象的情况下是100%。在抽象类抽象的情况下,抽象可以在0到100%之间变化。
一般情况下,默认情况下需要提供某些功能时使用抽象类,其余依赖于将扩展它的类。例如 假设Animal是抽象类。每个动物都有共同的东西说creatEnergy()有常见的东西,如食物成蛋白质,脂肪等,这是常见的。所以这种实施对所有动物都是一样的。 但是其他一些东西,比如move()可能会因Man,Bird,Fish等动物而异。因此,不同的动物可能以不同方式实施。因此,抽象在0到100%之间变化。
再次在Java类中,只能扩展一个类,但实现不同的接口。 因此,接口为类提供了一种在不同时间由接口提供不同行为的方法。
希望这个解释能够清除你的怀疑。如果需要更多解释,请告诉我。