如何从两个不同的抽象类中实现特定方法



我想从 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组件(。但是(恕我直言(在处理大量摘要方法时,"不良"设计的可能性很简单。

最新更新