兩個抽象類 A、B 需要互相調用對方的方法,但抽象類無法實例化。
abstract class A { abstract void callB(); }
abstract class B { abstract void callA(); }
class AImpl extends A {
private B b;
public AImpl(B b) { this.b = b; }
void callB() { b.someMethod(); }
}
class BImpl extends B {
private A a;
public BImpl(A a) { this.a = a; }
void callA() { a.someMethod(); }
}
// 使用時構建對象圖
B b = new BImpl(null);
A a = new AImpl(b);
b.setA(a); // 設置反向引用
abstract class A { static void staticMethod() { ... } }
abstract class B { void foo() { A.staticMethod(); } }
IB、IA,抽象類依賴接口而非具體類。優先使用方案一或方案三,保持面向對象設計原則;僅在純工具方法場景考慮 static。