2012-05-03 26 views
5

Giả sử tôi có giao diện này A:"Loại B không thể là một superinterface của C; một superinterface phải là một giao diện" lỗi

interface A 
{ 
    void doThis(); 
    String doThat(); 
} 

Vì vậy, tôi muốn có một số lớp học tóm tắt để thực hiện các doThis phương pháp () nhưng không phải là doThat() một:

abstract class B implements A 
{ 
    public void doThis() 
    { 
     System.out.println("do this and then "+ doThat()); 
    } 

} 

abstract class B2 implements A 
{ 
    public void doThis() 
    { 
     System.out.println(doThat() + "and then do this"); 
    } 
} 

có lỗi xảy ra khi bạn cuối cùng đã quyết định để thực hiện de doThat phương pháp trong một lớp học thường xuyên:

public class C implements B 
{ 
    public String doThat() 
    { 
     return "do that"; 
    } 
} 

Lớp học này dẫn tôi đến lỗi được đề cập ở trên:

"Loại B không thể là siêu kết nối của C; một superinterface phải là một giao diện"

Bất cứ ai cũng có thể bây giờ nếu hệ thống cấp bậc này của lớp học là hợp lệ hay tôi nên làm tròn cách khác không?

+0

Để biết thêm chi tiết, tôi khuyên bạn nên xem Câu trả lời tại đây: http://stackoverflow.com/questions/10839131/implement-vs-extends-when-to-use-whats-the-difference –

Trả lời

19

Bạn phải sử dụng extends

public class C extends B 

của nó quan trọng để hiểu sự khác biệt giữa các từ khóa implementsextends.Vì vậy, tôi khuyên bạn nên bắt đầu đọc câu hỏi này: Implements vs extends: When to use? What's the difference? và câu trả lời ở đó

+1

Cảm ơn! Tôi cũng quên thêm chuỗi trừu tượng công khai doThat() vào mỗi lớp trừu tượng: S –

+1

@PainyJames bạn không cần phải thêm 'chuỗi trừu tượng công cộng doThat()' vào mỗi lớp trừu tượng. – emory

4

Kể từ B là một lớp học, cú pháp đúng là sử dụng extends:

public class C extends B { 
2

B là một lớp trừu tượng và không thể được sử dụng với các "cụ" từ khóa. Thay vào đó, bạn phải sử dụng "mở rộng".

Các vấn đề liên quan