3 回答

TA貢獻1821條經驗 獲得超6個贊
使用匿名內部類我們可以做到。匿名類可以實現接口,我認為那時只有你有機會看到一個類實現了沒有“implements”關鍵字的接口。
interface Planet {
public void orbit();
}
class PlanetMain {
private Planet p = new Planet () {
public void orbit() {
System.out.println("interface Planet class executed");
}
};
}

TA貢獻1793條經驗 獲得超6個贊
是否可以在不直接引用實現類的情況下調用方法?
不,這不可能。Interface and implementation class只是聲明。要使用它,您必須使用new. 但是你不能這樣做,因為你想使用PlanetImpl受保護的邏輯。
我認為,您不想實現自己的類聲明,然后創建和使用它的新實例。我認為,只有一種方法是使用反射。使用它,您可以創建受保護類的實例,PlanetImpl然后以正常方式使用它。
Class<Planet> cls = (Class<Planet>)Class.forName("<full PlanetImpl class name, inclusing package>");
Constructor<Planet> constructor = cls.getDeclaredConstructor();
constructor.setAccessible(true);
Planet planet = constructor.newInstance();
planet.orbit();
添加回答
舉報