gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:22:02 26 4
gpt4 key购买 nike

我想访问Class A中的所有方法(非抽象+抽象)。

所以我扩展了 Class A,但是在 Class B 中我想访问所有非抽象方法并且只有 10 个抽象方法 - 因为我不想实现 rest B类的抽象方法。

问题:

1.我不能扩展 Class B 因为我已经扩展了 Class A

2.我不能将这 10 个方法放在一个接口(interface)中,因为我还想访问 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级

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
}

最佳答案

这里严重的非回答:停止;现在退后一步。忘记这样做吧。

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

继承不仅仅是写下A extends B。它以:在这种情况下,任何 A is-a B 开头。仅凭您在问题中提到的方法数量就表明您的类不遵循该简单规则;并且可能他们也在侵犯他人。

因此:不要浪费您的时间来理解如何将另外 10 个添加到您的类中的其他 30 方法。花时间扔掉一切;并构建一个真正的 OO 模型。

您将从了解问题域开始;从中派生出有意义的、有用的类。专注于要解决的问题的类(class)。 SOLID 之后的类规则。或者记住美好的旧FCoI范例。

长话短说:我会考虑对具有超过 10 个方法的类进行重构;但是 30 个抽象方法;这听起来(抱歉)(几乎)简直是疯了

编辑,对一些评论:当然,OP实际上可能具有合理的设计;因为有许多方法附带的类示例(例如,想想典型的 Swing UI 组件)。但是(恕我直言)在处理大量抽象 方法时,“糟糕”设计的可能性非常高。

关于java - 我如何从两个不同的抽象类中实现特定的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43527166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com