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

时间:2017-04-20 18:26:20

标签: java oop inheritance interface java-8

我想从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 
 }

1 个答案:

答案 0 :(得分:12)

严肃的不回答:停止;现在退后一步忘了这样做。

您的设计已经处于非常糟糕的状态,这可能性非常高。因为你应该总是喜欢简单类的复杂网络而不是复杂类的简单网络。

继承 更多,而不仅仅是写下A extends B。它始于:在这种情况下,任何A 都是-a B.单独你在问题中提到的方法数量表明你的类不遵循这个简单的规则;也许他们也在违反他人。

因此:不要浪费时间了解如何在课堂上添加另外10个 30 方法。花些时间扔掉一切;并构建一个真正的 OO模型。

首先要了解问题域;从中派生出有意义的,有用的课程。专注于要解决的问题的类。遵循SOLID规则的类。或者记住好的FCoI范例。

长话短说:我认为一个有10多种方法的课程需要重构;但 30个抽象方法;听起来(对不起)(几乎)彻头彻尾的疯狂

编辑,关于一些评论:当然,OP有可能实际上是一个合理的设计;因为有很多类的例子都带有很多方法(例如,考虑一个典型的Swing UI组件)。但是(imho)在处理大量抽象方法时,“糟糕”设计的可能性非常高。