我知道Java不允许我们扩展多个类。我知道接口也存在,这次我不想使用它们。是否有某种技巧或解决方法来扩展Java中的多个类?如果是,请同时提供示例代码。
答案 0 :(得分:3)
不,与C ++不同,您不能扩展多个类,但可以实现多个接口。
答案 1 :(得分:3)
您可以使用界面和构图轻松 。
问题是为什么你会问这样的事情?为什么你不想“在这个时候”使用接口?
您必须知道Java只允许单一继承实现。你已经在SO工作了七个月,所以你必须知道如何使用搜索功能。这里一再提出这个问题。
更有创意。 JPanel没有理由必须是Observable。 JPanel用于呈现。我同意其模型数据可能想要是Observable。无论如何都要用组合来做。
答案 2 :(得分:2)
NO。
转到interfaces
。没有多个inheritance in Java.
多重继承可能导致钻石问题。
JAVA省略了许多很少使用,知之甚少,令人困惑的C ++功能,这些功能在我们的经验中带来了比利益更多的悲伤。这主要包括运算符重载(虽然它确实有方法重载),多重继承和广泛的自动强制_ 博士。詹姆斯戈斯林
答案 3 :(得分:2)
java中的多重继承通常通过实现多个接口来完成。您不能扩展多个类。可能的解决方法可能是使用某种对象组合进行聚合。
答案 4 :(得分:1)
Java不支持这种类。你可以使用多个接口。你可以在java中找到多重继承的问题
您可以使用内部类,例如
public class class1 extends class2{
class Inner extends class3{
}
}
答案 5 :(得分:1)
可能有帮助
class One{
void oneMethod(){
}
}
class Two extends One{
void TwoMethod(){
}
}
class Abc extends Two{
@Override
void oneMethod() {
// TODO Auto-generated method stub
super.oneMethod();
}
@Override
void TwoMethod() {
// TODO Auto-generated method stub
super.TwoMethod();
}
}
答案 6 :(得分:1)
多重继承增加了复杂性而几乎没有什么好处,这就是为什么它不存在于java Why is Multiple Inheritance not allowed in Java or C#?
中我能想到的一种方法是用支持它的语言(例如C ++)编写需要多重继承的程序,然后使Java代码与该程序的输出交互,例如使用文件或数据库。
答案 7 :(得分:0)
答案是否定的。但如果有帮助,你可以这样做:
A延伸B
B扩展了C
所以A扩展B和C
答案 8 :(得分:0)
改用接口。以下是代码中的外观:
public Class ClassName implements Interface1, Interface2 {
Methods, fields etc...
}
答案 9 :(得分:0)
要避免 diamond problem Java不支持通过类进行多重继承,但它支持使用接口。 所以你可以使用关联关系。 e.g。
Class A {}
Class B {}
Class C implements SomeInterface {
A a;
B b;
// setter getter for a and b and other methods
}
答案 10 :(得分:0)
您可以使用功能查找。
class Vehicle {
T <T> lookup(Class<T> klazz) {
return map.get(klazz); // typically
}
}
interface Flyable {
void fly();
}
Vehicle x;
Flyable f = x.lookup(Flyable.class);
if (f != null) {
f.fly();
}
这解耦了类。它需要运行时检查。
它使用委托:实现查找类/接口的本地成员。
的优势:强> 的
您可以从车辆派生一个可以飞行(可飞行)和潜水(潜水)的类。飞行可以通过共享类的实例来实现。您甚至可以动态组合功能(向船上添加轮子)。
这通常比实现多个接口更好,其中fly()
可以是代码副本,也可以委托Flyable字段(具有共享实现类)。
特别是涉及多个接口/类时,否则会冒险使用案例和不安全的强制转换来冒犯基类对象(此处为Vehicle)的代码,忘记if (x instanceof Boat)
。
答案 11 :(得分:0)