gpt4 book ai didi

java - 抽象类或接口(interface)

转载 作者:行者123 更新时间:2023-12-02 11:02:02 25 4
gpt4 key购买 nike

public class C {
public abstract Boolean methodC();
}

Class A implements C {
// all non-abstract methods
}

Class B extends A {
// all non-abstract methods
}

In Java, can C be an abstract class or does it have to be an interface? [NOTE: It says - 'A IMPLEMENTS C'. Can you IMPLEMENT an abstract class in Java?]

最佳答案

以下是一些通俗术语的描述,可以提供帮助:

接口(interface):这是方法的集合。它们没有任何定义,它们的功能由实现它们的决定。接口(interface)的一个例子是列表。所有列表(ArrayList、LinkedList)都有 add() 和 remove() 方法,因为它们实现了 List 接口(interface),而这需要它们。

public interface List {
public void add (Object o);
public void remove (Object o);
}

public class MyList implements List {

public void add (Object o) {
// I must implement this method because of the interface List
}

public void remove (Object o) {
// I must implement this method because of the interface List
}
}

抽象类:这是一个部分完成的类。它与接口(interface)的不同之处在于它本身通常包含一些功能。但是,它(通常)缺少一些需要由 *extend*ing 子类定义的方法。这些方法在抽象父类(super class)中被定义为抽象方法。

public abstract class AbstractThing {

public void method1 (Object o) {
// This is a real method that does things
}

// Anyone who extends me must implement this
public abstract void method2 (Object o1, Object o2);
}

public class ActualThing extends AbstractThing implements List {

public void add (Object o) {
// I must implement this method because of the interface List
}

public void remove (Object o) {
// I must implement this method because of the interface List
}

public void method2 (Object o1, Object o2) {
// I must implement this method because of abstract method in
// the super class
}

类使用implements关键字来指示它将实现接口(interface)所需的方法。一个类可以实现任意多个接口(interface);唯一的要求是它为每个方法提供定义。它也可以被定义为抽象并依赖其子类来定义一些抽象。然后,这些方法就像任何其他抽象类的抽象方法一样。

类使用extends关键字来指示它将向某些现有类添加功能。如果父类是抽象的,则扩展类必须实现父类中的任何抽象方法。一个类只能扩展一个父类。

为什么这么复杂?接口(interface)很好,因为您可以假设实现类的某些功能。具体情况是List接口(interface)。大多数方法并不关心它们得到什么样的列表;而是关心它们得到什么样的列表。他们只是想知道该对象支持常见的列表方法。在声明中:

List<String> myList = new ArrayList();

您正在创建一个实际的 ArrayList 对象,但将其实现隐藏在 List 接口(interface)下。然后,如果您决定改用 LinkedList,则不必更改所有代码,因为它也实现了 List 接口(interface)。

还有一些 Java 定义的“接口(interface)集”(例如持久性)但没有实现。这允许第三方开发自己的实现(实际的类),但由于它们都实现相同的公共(public)接口(interface),因此开发人员可以在不更改代码的情况下交换实现。

关于java - 抽象类或接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5546351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com