Given:



interface Doable {

    public void doSomething(String s);
}

Which two class definitions compile?

A.

public abstract class Task implements Doable {

    public void doSomethingElse(String s) {
    }
}

B.

public abstract class Work implements Doable {

    public abstract void doSomething(String s) {
    }

    public void doYourThing(Boolean b) {
    }
}

C.

public class Job implements Doable {

    public void doSomething(Integer i) {
    }
}

D.

public class Action implements Doable {

    public void doSomething(Integer i) {
    }

    public String doThis(Integer j) {
    }
}

E.

public class Do implements Doable {

    public void doSomething(Integer i) {
    }

    public void doSomething(String s) {
    }

    public void doThat(String s) {
    }
}

題解

選項A,雖然Task類別沒有實作出Doable介面的doSomething方法,但是Task類別為抽象類別,因此允許未實作的方法。

選項B,抽象方法不能有程式實作區塊。

選項C,Job類別的doSomething抽象方法傳入的參數和Doable介面的doSomething方法不同,將不被認為是實作Doable介面的doSomething方法,所以Job類別會因沒有實作Doable介面的doSomething方法而無法編譯。

選項D,錯誤理由同選項C。

選項E,有成功實作出Doable介面的doSomething方法。