问题描述
我需要在项目中扩展.class文件,并且需要覆盖一个简单的方法。 考虑我有A类,它在某个.jar包中。现在我想重写AI类的test()方法是通过创建A的子类B并重写它来实现的。 现在在我的应用程序包中(它是.jar),为类A创建了对象。此对象调用类A的方法。但是我想调用类B的方法。
我的想法是代理整个应用程序中的对象创建。 每当在那时创建类A的obj时,我都希望进行一些配置以创建类B的对象并移交给类A的启动器。
请有人帮助我实施这种机制。
1楼
仅当构造函数为private时,才可以阻止或控制类的实例化。
如果您不能覆盖原始基类并希望代理它,则需要一个工厂并建议程序员使用该工厂,而不是直接调用基类的构造函数。
在工厂代码中,您可以返回作为基类代理的子类。
请记住,这只是一个建议。 您不能阻止程序员使用公共构造函数手动创建类的实例。
2楼
以下是一种简单的方法(使用类型转换),通过它我们可以使用Parent类对象来调用Child类方法:
package testA;
public class A
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
public String aMethod(){
System.out.println("Calling aMethod");
return "aMethod";
}
}
package testB;
import testA.*;
public class B extends A
{
public static void main(String[] args)
{
System.out.println("Hello World!");
A aClass = new B();
aClass.aMethod();
((B)aClass).bMethod();
}
public String bMethod(){
System.out.println("calling B method");
return "bMethod";
}
}