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"
}
}
使用重复代码似乎不是一个好主意,我怎样才能正确设计我的课程?
答案 0 :(得分:9)
您可以使用合成和委托,以及其他选项:
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(); }
}
答案 1 :(得分:3)
Java 8引入了“默认方法”的概念 - 但在此之前你无法解决它。
答案 2 :(得分:0)
您可以将a
设为默认方法:
interface IA {
public default void a(){ System.out.println("a"); }
}