作者adrianshum (Alien)
看板java
标题Re: [问题] 要求继承的子类别的method一定要呼叫supe
时间Wed Aug 26 19:03:08 2015
※ 引述《LaPass (LaPass)》之铭言:
: class A {
: void mthodA(){
: //一些重要的东西
: }
: }
: class B extants A{
: @override
: void methodA(){
: super.methodA(); // 如何要求子类别一定要呼叫这行?
: }
: }
: 不知道没有办法作到这种限制条件
: 我只看到android的activity
: 是采用在执行时检查这个
: 但有没有办法在编译时期就处理?
: 例如用 annotation 之类的方式
一般来说在设计上避过就可以了。
可以参看 Template Method pattern。简单来说:
class A {
final void methodA() { // 那麽重要就别让 child override 了
importantLogic();
doA();
}
protected void doA(){ // override 专用
}
}
class B extends A {
@Override
protected void doA() {
// 保证 importantLogic() 已跑
// B 的额外 logic
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.19.45.239
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1440586991.A.ED9.html
※ 编辑: adrianshum (223.19.45.239), 08/26/2015 19:03:39
※ 编辑: adrianshum (223.19.45.239), 08/26/2015 19:04:30
1F:→ LaPass: 这也是一种方式 08/26 21:17
2F:推 eieio: 推 08/27 13:12
3F:推 cha122977: 推 自己也常用这种方式 08/27 13:32
4F:→ cha122977: 不过这个写法的缺点是不能控制super的呼叫时机 08/27 13:34
5F:→ adrianshum: 楼上:反过来想,super.method() 的时机你可以控制在 08/28 07:11
6F:→ adrianshum: 恰当的时候做,而不是让 child 乱 call 08/28 07:12
7F:→ cha122977: 对阿 所以当child需要有可能调整super的时机时不适用 08/28 13:54
8F:→ cha122977: 有可能需要 08/28 13:55
9F:→ cha122977: 毕竟这个写法已经脱离"要求child一定要super"的需求了 08/28 13:57
10F:→ adrianshum: 有这种需求自然有方法去解决啦 :) 通常会 08/28 20:56
11F:→ adrianshum: preA(); super.a(); postA(); 之类 08/28 20:56