我需要在我的项目中扩展一个 .class 文件,并且需要覆盖一个简单的方法。考虑我有一些.jar包中的A类。现在我想覆盖AI类的test()方法,使用创建A的子类B并覆盖它。现在在我的应用程序包(它是 .jar)中为 A 类创建对象。该对象调用 A 类的方法。但我想调用 B 类方法。
我的想法是在整个应用程序中代理对象创建。每当创建 A 类的 obj 时,我想要一些配置来创建 B 类的对象并移交给 A 类启动。
请有人帮我实现这种机制。
我需要在我的项目中扩展一个 .class 文件,并且需要覆盖一个简单的方法。考虑我有一些.jar包中的A类。现在我想覆盖AI类的test()方法,使用创建A的子类B并覆盖它。现在在我的应用程序包(它是 .jar)中为 A 类创建对象。该对象调用 A 类的方法。但我想调用 B 类方法。
我的想法是在整个应用程序中代理对象创建。每当创建 A 类的 obj 时,我想要一些配置来创建 B 类的对象并移交给 A 类启动。
请有人帮我实现这种机制。
仅当构造函数为private时,您才能阻止或控制类实例化。
如果不能覆盖原来的基类,又想代理它,就需要一个工厂,建议程序员使用工厂,而不是直接调用基类的构造函数。
在工厂代码中,您可以返回一个作为基类代理运行的子类。
请记住,这只是一个建议。您不能阻止程序员使用公共构造函数手动创建类的实例。
以下是我们可以使用父类对象调用子类方法的简单方法(使用类型转换):
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";
}
}