Roh*_*rya 5 java oop inheritance interface java-8
我想从中访问所有方法(非抽象+抽象)Class A.
所以我扩展了Class A,但在这里,Class B我想访问所有非抽象方法,只有10个抽象方法 - 因为我不想实现其余的抽象方法class B.
问题:
我不能延长,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
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
Gho*_*ica 12
严肃的不回答:停止; 现在退后一步 忘了这样做.
您的设计已经处于非常糟糕的状态,这可能性非常高.因为你应该总是喜欢简单类的复杂网络而不是复杂类的简单网络.
继承是多少不仅仅是写下更多A extends B.它始于:在这种情况下,任何A 是 -a B.单独你在问题中提到的方法数量表明你的类不遵循这个简单的规则; 也许他们也在违反他人.
因此:不要浪费你的时间来理解如何在你班级的其他30种方法中添加另外10 种方法.花些时间扔掉一切; 并构建一个真正的 OO模型.
您首先要了解问题域; 从中派生出有意义的,有用的课程.专注于要解决的问题的类.遵循SOLID规则的类.或者记住好的旧FCoI范例.
长话短说:我认为一个有10多种方法的课程需要进行重构; 但有30种抽象方法; 听起来(对不起)(几乎)彻头彻尾的疯狂.
编辑,在一些评论:当然,OP有可能实际上是一个合理的设计; 因为有很多类的例子都带有很多方法(例如,考虑一个典型的Swing UI组件).但是(imho)在处理大量抽象方法时,"糟糕"设计的可能性非常高.