我有一个叫Base
类,它有一个名为方法。大约有100个类从这个基类派生,并提供他们自己的的实现。现在,我有一些我想要在Base.SomeMethod()
中输入的常用逻辑。该方法需要在的末尾调用。我的问题是否可以在不更改每个派生类的方法的情况下调用此方法?如何调用基类方法不改变所有派生类
回答
public class Base {
public final void execute() {
doExecute();
someMethod();
}
protected abstract void doExecute();
public void someMethod() {
}
}
此解决方案可防止super code smell。
是的,但你必须改变呼叫者。调用者必须调用doExecute()
(尽管找到一个更好的名字)方法,您在基类中将其定义为final,并调用,然后调用通用代码。
另一种选择是面向方面的编程,但我不会推荐它用于此目的,也就是要“破解”代码。
的问题是:为什么在100个左右的类别这样的问题改变方法的名字吗?这是使用IDE单击鼠标。
不是我所知道的。下一次你应该考虑你可能想为所有扩展类添加一些常见的操作,并且要求super.execute()
!
只能通过使用代表您的代码的东西;这对纯Java来说是不可能的。
让我说出你的问题,我的理解:动物类有有执行和因继承所有子类有这个会员呼吸()方法,除非有呼吸的人非常不同的方式将覆盖。
现在,在呼气的方法结束时,你要调用CloseEyes()动物类的方法,并且可以是部分或全部子类覆盖CloseEyes()方法,这是事实。
所以你的问题:每当你想他们CloseEyes但是从动物类,而不是从派生类的任何动物的气息。
如果已经有CloseEyes()在许多派生类中的方法,那么你实际上是做一些错误调用基类的CloseEyes()。
如果你仍然只想调用基类的方法,那么为什么你需要相同的方法名称 - 你只是说AnimalEyeClose(),使其成为私人的,并在动物类中。
我什么时候说我想用同名的方法? – Asha 2012-04-06 05:18:55
- 1. 派生类如何调用基类的私有方法?
- 2. 如何从派生类方法调用基类方法?
- 3. C++如何从多个派生类调用基类方法?
- 4. C++如何从基类中调用派生类中的方法
- 5. 如何从C++派生类调用基类方法?
- 6. CRTP - 如何从派生类调用基类的实现方法?
- 7. 如何调用被覆盖的方法,所有派生类
- 8. 派生类没有调用基类的方法
- 9. 从静态基类方法调用静态派生类方法
- 10. 从派生类方法调用基类方法
- 11. 派生类的方法从基类调用方法
- 12. 为什么调用基类方法代替派生类方法?
- 13. 如何调用通过基类指针基类方法指向派生类
- 14. C++继承:派生类指向基类调用Derived类方法
- 15. 如何修改所有派生类中的方法返回值?
- 16. C++无法从派生类中调用基类方法
- 17. 无法从派生类中调用基类方法
- 18. C# - 使所有派生类调用基类构造函数
- 19. 派生的方法在基类不叫
- 20. 基类方法返回派生类objec
- 21. 在基类中调用派生类方法
- 22. C++调用派生类中基类的模板方法
- 23. 从基抽象类(反射)调用派生类方法
- 24. 从基类参考调用派生类的方法
- 25. 从派生类中调用C#基类扩展方法?
- 26. 从基类调用派生类构面的方法吗?
- 27. 的Java:调用从第二派生类的基类方法
- 28. 从派生类对象调用基类方法
- 29. 通过基类的ptr调用派生类的方法
- 30. 已解决:从基类内调用派生类方法?
我必须将所有派生类从执行更改为doExecute正确吗? – Asha 2012-04-05 18:38:01
@Asha是的,但大多数IDEs会让所有的方法一次改变,所以它不应该是一个大问题。 – Jeffrey 2012-04-05 18:39:53