Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的多重继承解决方案? 接口IA{ 公共无效a(); } AB类实现IA{ @凌驾 public void a(){System.out.println(“a”);}/_Java_Design Patterns - Fatal编程技术网

Java中的多重继承解决方案? 接口IA{ 公共无效a(); } AB类实现IA{ @凌驾 public void a(){System.out.println(“a”);}/

Java中的多重继承解决方案? 接口IA{ 公共无效a(); } AB类实现IA{ @凌驾 public void a(){System.out.println(“a”);}/,java,design-patterns,Java,Design Patterns,您可以将a作为默认方法: interface IA { public void a(); } class AB implements IA { @Override public void a() { System.out.println("a"); } // <---. public void b() { System.out.println("b"); } } class C { public void c() { System.out.pr

您可以将
a
作为默认方法:

interface IA {
    public void a();
}

class AB implements IA {
    @Override
    public void a() { System.out.println("a"); } // <---.

    public void b() { System.out.println("b"); }
}

class C {
    public void c() { System.out.println("c"); }
}


// My class:
class AC extends C implements IA {
    @Override
    public void a() { System.out.println("a"); } // duplicate code 
}

public class Main {
    public static void main(String[] args) {
        AC ac = new AC();
        ac.a(); // "a"
        ac.c(); // "c"
    }
}

除其他选项外,您还可以使用合成和委派:

interface IA {
    public default void a(){ System.out.println("a"); }
}

Java8引入了“默认方法”的概念但是在这之前,你没有办法。

这是一个快速的方法,但是我个人不喜欢默认的方法被添加到java中,当使用不当时,可能会造成混乱。如果你这样做,一定要确保在开发过程中保持清晰的代码结构。谢谢。我已经进入C++ LLA了。这是真的,但我仍然不认为我们可以称之为多重继承。对于接口和类,仍然有很多限制,比如定义构造函数、访问除局部变量以外的变量等。这是多重继承和无多重继承之间的一种折衷。但是,是的,它确实增加了f引用在两个接口中定义的相同方法。@Mustafasabir同意(而且对于记录,我从未将其视为多重继承)
interface IA {
    public void a ();
} 

interface IB {
    public void b ();
}

class A implements IA {
    @Override public void a () { /* code */ }
}

class B implements IB {
    @Override public void b () { /* code */ }
}

class AB implements IA, IB {
    final A a = new A();
    final B b = new B();
    @Override public void a () { a.a(); }
    @Override public void b () { b.b(); }
}