2013-02-11 22 views
1

這實際上是一個普通的Java問題,但我認爲用它從中產生的特定Webdriver透視圖來解釋會更容易。如何組織這些抽象頁面對象方法?

我有一個複雜的頁面對象,我現在想抽象,因爲我發現了另一個非常相似但在關鍵方面不同的頁面。現在我的許多方法已經返回了頁面對象的實例,這些方法被破壞了。我想在抽象類中保留這些方法的大部分代碼,並且仍然讓它們返回新子類的實例;這些方法應該返回稱爲它們的任何子類的新實例。

以下是兩個子類共有的navNextPage方法的示例。這似乎是工作,但感覺不對:

public abstract class PresContentPage { 
    protected PresContentPage navNextPage() { 
      // code to navigate to the next page goes here 
      return null; 
    } 
} 

public class MainContent extends PresContentPage { 
    public MainContent navNextPage() { 
      super.navNextPage(); 
      return new MainContent(...); 
    } 
} 

// And so on with another subclass... 

所以,這個我想要做什麼:爲navNextPage方法的代碼在抽象類是孤立的,而是被調用的版本將返回的頁面對象調用該方法的類型。

我只是覺得我的受保護的方法不是,也不能是void,返回null。但由於它是受保護的,而且它是一個抽象類,所以沒人會永遠無法稱呼它,對嗎?這能讓它好嗎?有沒有更好的方式來做到這一點,我從來沒有學過?

我想到的另一個選擇是用一個不同的名稱,如navNextPageVoid做一個void方法,並讓子類調用該方法而不是super.navNextPage,但是......看起來有點不一樣。

在此先感謝!

回答

0

通常情況下,如果你想強制一個方法在專業化實施,你可以使它abstract in the generalisation。因此

公共抽象類PresContentPage { abstract PresContentPage navNextPage(); }

+0

事實上,我可以這樣做 - 但方法的實現將完全相同 - 只使用抽象類中的數據 - 除了最終的return語句之外。所以我試圖將共享代碼保留在抽象類中,而不是在每個子類中都有兩個副本。現在我已經有了一個navNextPageVoid方法,它可以完成所有的事情,但是抽象類中的最終返回。 – 2013-02-11 18:21:44