Java 如何组织这些抽象页面对象方法?

Java 如何组织这些抽象页面对象方法?,java,webdriver,abstract,Java,Webdriver,Abstract,这确实是一个一般的Java问题,但我认为用它产生的特定Webdriver视角来解释会更容易 我有一个复杂的页面对象,我现在想把它抽象出来,因为我发现另一个页面非常相似,但在关键方面有所不同。现在,我的许多方法(返回了page对象的实例)都被破坏了。我希望将这些方法的大部分代码保留在抽象类中,并且仍然让它们返回新子类的实例;这些方法应该返回调用它们的任何子类的新实例 下面是一个navNextPage方法的示例,该方法对于这两个子类都是通用的。这似乎有效,但感觉不对: public abstract

这确实是一个一般的Java问题,但我认为用它产生的特定Webdriver视角来解释会更容易

我有一个复杂的页面对象,我现在想把它抽象出来,因为我发现另一个页面非常相似,但在关键方面有所不同。现在,我的许多方法(返回了page对象的实例)都被破坏了。我希望将这些方法的大部分代码保留在抽象类中,并且仍然让它们返回新子类的实例;这些方法应该返回调用它们的任何子类的新实例

下面是一个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方法的代码存储在抽象类中,但是被调用的版本将返回调用该方法的类型的page对象

我只是觉得让我的受保护方法返回null是不对的,它不是也不能是空的。但是因为它是受保护的,而且是一个抽象类,所以无论如何,没有人能够调用它,对吗?这样可以吗?有没有比这更好的方法,我从来没有学过

我想到的另一个选择是使用不同的名称创建一个void方法,比如
navNextPageVoid
,并让子类调用它,而不是
super.navNextPage
,但是。。。从另一个角度看,这似乎有点恶心


提前谢谢

通常,如果您想强制某个方法在某个专业领域中实现,那么您可以选择它。所以

公共抽象类PreContentPage{ 抽象PreContentPage navNextPage();}


事实上,我可以做到这一点——但方法的实现将完全相同——并且只使用来自抽象类的数据——除了最终的返回语句。因此,我试图将共享代码保存在抽象类中,而不是在每个子类中都有两个副本。现在我已经决定使用一个navNextPageVoid方法,除了在抽象类中的最终返回之外,它可以执行所有操作。