我想从Class A
访问所有方法(非抽象+抽象)。
所以我扩展了Class A
,但在Class B
这里我想访问所有非抽象方法,只有10个抽象方法 - 因为我不想实现{{1的其余抽象方法}}
问题:
1.我无法延长class B
,因为我已经延长了Class B
。
2.我不能将这10个方法放在接口中,因为我还想从Class A
访问非抽象方法。
重用这些方法的正确方法是什么?
A级
class B
B级
abstract class A{
public void m1(){
//do stuff
}
public void m2(){
//do stuff
}
// +30 more non abstract methods
public abstract void n1();
public abstract void n2();
// +30 more abstract method
}
C班
abstract class B{
public void a1(){
//do stuff
}
public void a2(){
//do stuff
}
// +30 more non abstract methods
public abstract void b1();
public abstract void b2();
// +30 more abstract method
}
答案 0 :(得分:12)
严肃的不回答:停止;现在退后一步忘了这样做。
您的设计已经处于非常糟糕的状态,这可能性非常高。因为你应该总是喜欢简单类的复杂网络而不是复杂类的简单网络。
继承 更多,而不仅仅是写下A extends B
。它始于:在这种情况下,任何A 都是-a B.单独你在问题中提到的方法数量表明你的类不遵循这个简单的规则;也许他们也在违反他人。
因此:不要浪费时间了解如何在课堂上添加另外10个 30 方法。花些时间扔掉一切;并构建一个真正的 OO模型。
首先要了解问题域;从中派生出有意义的,有用的课程。专注于要解决的问题的类。遵循SOLID规则的类。或者记住好的FCoI范例。
长话短说:我认为一个有10多种方法的课程需要重构;但 30个抽象方法;听起来(对不起)(几乎)彻头彻尾的疯狂。
编辑,关于一些评论:当然,OP有可能实际上是一个合理的设计;因为有很多类的例子都带有很多方法(例如,考虑一个典型的Swing UI组件)。但是(imho)在处理大量抽象方法时,“糟糕”设计的可能性非常高。