我有这样的事情:
class SuperClass {
public void onClick(){
if(disabled) return;
}
}
class SubClass extends SuperClass {
public void onClick(){
super.onClick();
System.out.println("Clicked");
}
}
每次单击按钮时都会输出“Clicked”。
如果disabled为true并且不想在每个SubClass中添加额外的行,我希望SubClass onClick()不起作用。我怎么能这样做?
答案 0 :(得分:3)
abstract class SuperClass {
public void onClick(){
if(!disabled) clickAction() ;
}
public abstract void clickAction();
}
class SubClass extends SuperClass {
public void clickAction(){
System.out.println("Clicked");
}
}
答案 1 :(得分:2)
也许是这样的:
class SuperClass {
public void onClick(){
if(disabled) return;
processClick();
}
protected void processClick() {
}
}
class SubClass extends SuperClass {
protected void processClick(){
super.processClick();
System.out.println("Clicked");
}
}
答案 2 :(得分:2)
委托另一种方法:
class SuperClass {
public void onClick(){
if(!disabled) handleOnClick();
}
public void handleOnClick(){
}
}
class SubClass extends SuperClass {
public void handleOnClick(){
System.out.println("Clicked");
}
}
答案 3 :(得分:2)
无论如何你不可能这样。超级对象中的函数调用没有任何权限来阻止子类中的方法执行。您正在寻找的是TemplateMethodPattern模式。你可以有这样的东西
abstract class SuperClass {
public void onClick(){
if(disabled) return;
doClick();
}
protected abstract void doClick();
}
class SubClass extends SuperClass {
protected void doClick(){
System.out.println("Clicked");
}
}