这实际上是一个普通的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
方法的代码在抽象类中被孤立,但被调用的版本将返回调用该方法的类型的页面对象。
我只是觉得我的受保护方法错了,它不是也不能为空,返回null。但既然它受到了保护,而且它是一个抽象的类,那么无论如何都没有人能够调用它,对吧?那可以吗?有没有更好的方法来做到这一点,我从来没有学过?
我想到的另一个选择是使用不同的名称(例如navNextPageVoid
)创建一个void方法,并让子类调用而不是super.navNextPage
,但是......这似乎有点粗略不同的方式。
提前致谢!
答案 0 :(得分:0)
通常,如果您想强制在专业化中实施某个方法,请将其设为abstract in the generalisation。因此
公共抽象类PresContentPage { abstract PresContentPage navNextPage(); }