[英]selenium: override setUp method in super class and call super super method
[英]Call super class method automatically
考慮以下課程
class A{
public void init(){
//do this first;
}
public void atEnd(){
//do this after init of base class ends
}
}
class B1 extends A{
@Override
public void init()
{
super.init();
//do new stuff.
//I do not want to call atEnd() method here...
}
}
我有幾個B1,B2,... Bn子類已經開發。 它們全部都擴展了類A。如果我想在所有類中添加新功能,最好的方法是在類A中的方法中進行定義。但是條件是該方法應始終在該方法被自動調用之前子類的init()方法結束。 一種基本方法是在子類的init()方法末尾再次添加atEnd()方法調用。 但是還有其他方法可以巧妙地做到這一點嗎?
一種方法是使init()
final,然后將其操作委托給第二個可重寫的方法:
abstract class A {
public final void init() {
// insert prologue here
initImpl();
// insert epilogue here
}
protected abstract void initImpl();
}
class B extends A {
protected void initImpl() {
// ...
}
}
每當有人調用init()
,都會自動執行序言和結語,並且派生類不必執行任何操作。
另一個想法是編織一個方面。 在建議之前和之后添加切入點。
使init()
final
,並為人們提供一個單獨的方法來覆蓋中間的init()
調用:
class A{
public final void init(){
//do this first;
}
protected void initCore() { }
public void atEnd(){
//do this after init of base class ends
}
}
class B1 extends A{
@Override
protected void initCore()
{
//do new stuff.
}
}
其他答案是合理的解決方法,但可以解決一個確切的問題:不,沒有辦法自動執行此操作。 您必須顯式調用super.method()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.