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();
添加回答
举报
