2013-10-31 210 views
-4

我是Java编程新手,但有一些基本的理解。这里是我的问题, 我有一个基类,许多类扩展了这个基类。在某些情况下,在基类方法执行的标准 操作之后,我需要为某些子类执行一些操作。 所以我只是按照以下方式完成。只是想检查我是正确的按照OOPSJava基类和子类方法覆盖

class BaseClass { 

    public void deleteThisRecord() { 
     // All standard code goes here 
     doSomethingAfterDelete(); // call clean up method after sucessful delete 
    } 

    public void doSomethingAfterDelete() { 
     // Nothing is here, let the sub class override this if there is need 
    } 
} 

class OneClass extends BaseClass { 
    // other methods 

    @Override 
    public void doSomethingAfterDelete() { 
     // do some action after delete 
    } 
} 
+0

这将工作,如果基类有一个默认的实现,并且你想要改变一些子类。如果你想让子类被强制拥有它,你可能需要考虑使用抽象类 – dbarnes

+5

这个问题更多关于http://codereview.stackexchange.com/的主题,但给你我的看法是没有任何违法的关于这样做。我有时候会这样做,因为它比抽象方法稍微灵活一些。有时候我只想要一些子类来做某件事。 – Radiodef

+0

你可能应该做'deleteThisRecord()** ** final **,这样子类在不调用'doSomethingAfterDelete()'的情况下不会再执行它。 – SJuan76

回答

1

是的,这将按照您描述的方式工作,因为派生类可以选择是否实施doSomethingAfterDelete()。然而,在Java中,一个基类的所有方法都可以在默认情况下在派生类中重写,所以你可能会喜欢的final改性剂添加到您的方法deleteThisRecord()以防止它被覆盖:

public final void deleteThisRecord() { 
    // All standard code goes here 
    doSomethingAfterDelete(); // call clean up method after successful delete 
} 
1

抽象方法是只能从子类中调用的占位符方法。我建议,如果doSomethingAfterDelete()是用来覆盖空的占位符方法,你应该把它写成:

public abstract void doSomethingAfterDelete(); 

,然后在子类中,将其覆盖。

+0

基类也必须被声明为抽象的。 –