我想从 Class A
。
所以我扩展了Class A
,但是在Class B
中,我想访问所有非抽象方法,只有10种抽象方法 - 因为我不想实现class B
的其余抽象方法。
问题:
1.我无法扩展Class B
,因为我已经扩展了Class A
。
2.我不能将这些10种方法放入接口中,因为我也想从class B
访问非抽象方法。
重用这些方法的正确方法应该是什么?
a类
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
}
B类B
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
}
类C
class C extends A{
public void n1(){
//do stuff
}
public void n2(){
//do stuff
}
//+30 more abstract methods implemented
//But here i want all the non abstract methods and only 10 abstract methods of B
}
严重的非答案:停止;现在退后一步。忘了这样做。
的机会非常高,您的设计已经处于非常糟糕的状态。因为您应该始终更喜欢简单类的复杂网络,而不是复杂类的简单网络。
sashitance 是多大的不仅仅是写下A extends B
。首先:在这种情况下,任何A is-a B。仅您在问题中提到的方法数量表明您的类并不遵循该简单的规则;也许他们也违反了别人。
因此:不要浪费时间来理解如何将另外10个添加到班级中的其他 30 方法中。花时间扔掉一切;并构建一个真实 OO模型。
您将首先了解问题域;从中获得有意义的,有用的课程。专注于解决问题的课程。遵循坚实规则的课程。或记住旧的FCOI范式。
长话短说:我会考虑一门具有10种以上方法的课程。但是 30个摘要方法;听起来(对不起((几乎(彻底疯狂。
编辑,在某些评论中:当然,OP实际上可能具有合理的设计;由于有很多方法的类别示例(例如,考虑典型的挥杆UI组件(。但是(恕我直言(在处理大量摘要方法时,"不良"设计的可能性很简单。