抽象类或接口

Nee*_*eel 2 java interface class abstract

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

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

Class B extends A {
// all non-abstract methods
}
Run Code Online (Sandbox Code Playgroud)

在Java中,可以C是抽象类还是必须是接口?[注:它说 - '一个实施C'.你能用Java实现一个抽象类吗?]

jbr*_*ver 5

以下是一些非常有用的术语说明:

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

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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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
    } 
Run Code Online (Sandbox Code Playgroud)

工具使用关键字的一类,表明它是要实现由要求的方法接口.一个类可以实现任意数量的接口; 唯一的要求是它为每个方法提供了一个定义.它也可以定义为抽象,并依赖其子类来定义一些.然后,这些方法就像任何其他抽象类的抽象方法一样.

扩展关键字用于一类,表明它打算将功能添加到现有的一些类.如果父类是抽象的,则扩展类必须在父类中实现任何这些抽象方法.一个类只能扩展一个父类.

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

List<String> myList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

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

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