2016-08-17 36 views
1

類框架:Java:如何在接口中調用實現類的元素?

public class Tree<AnyType extends Comparable <? super AnyType>> { 
    private static class BinaryNode<AnyType>{} 

    private BinaryNode<AnyType> root; 
    public Tree(){} 
    public void makeEmpty(){} 
    public boolean isEmpty(){ 
     /*code*/ 
    } 
    public boolean contains(AnyType x){ 
     /*code*/ 
    } 
    public boolean contains(AnyType x, BinaryNode<AnyType> node){ 
     /*code*/ 
    } 
} 

我想創建一個接口,但BinaryNode是私有的:

public interface TreeFramework<AnyType> { 
    public void makeEmpty(); 
    public boolean isEmpty(); 
    public boolean contains(AnyType x); 
    public boolean contains(AnyType x, BinaryNode<AnyType> e); //fail 
} 

我一定要建立一個公共BinaryNode類?

+0

讓我們退一步:爲什麼要創建這樣一個接口? BinaryNode的要點是:它是該實現的內部細節;顯然不意味着在課外使用?那麼,你的界面中第四種方法的目的是什麼? – GhostCat

+0

我想你誤解了接口的使用。一般來說,你不應該在你的界面中需要'BinaryNode'。 –

+0

@GhostCat我想知道是否存在類似'super'的調用。樹主要是因爲BinaryNode。 – zhanzezhu

回答

1

我看到的問題是,您正在收到編譯器錯誤,因爲客戶端代碼無法找到任何要導入的BinaryNode類。您始終可以接受普通的舊版本java.lang.Object,並使用Object#equals()方法來確定與大多數標準庫集合相同的平等。

看看您的界面設計,我沒有看到客戶端代碼如何訪問Tree類中的BinaryNode引用。除非此接口不完整,否則在contains方法中公開BinaryNode類對於潛在客戶端來說似乎沒有多大作用。

+0

謝謝你的回答。如果我刪除** private **,則成爲'public boolean contains(AnyType x,Tree.BinaryNode e);'不? – zhanzezhu

+0

你想在這裏完成什麼?我沒有看到返回BinaryNode的方法。只要代碼沒有對BinaryNode的引用,客戶端代碼就不會發現這個接口有用。如果有方法,我會建議創建一個單獨的文件與一個簡單的骨頭接口。隨着向這些類添加新功能,這使得代碼可以很容易地增長。 –