1

我需要在我的项目中扩展一个 .class 文件,并且需要覆盖一个简单的方法。考虑我有一些.jar包中的A类。现在我想覆盖AI类的test()方法,使用创建A的子类B并覆盖它。现在在我的应用程序包(它是 .jar)中为 A 类创建对象。该对象调用 A 类的方法。但我想调用 B 类方法。

我的想法是在整个应用程序中代理对象创建。每当创建 A 类的 obj 时,我想要一些配置来创建 B 类的对象并移交给 A 类启动。

请有人帮我实现这种机制。

4

2 回答 2

0

仅当构造函数为private时,您才能阻止或控制类实例化。

如果不能覆盖原来的基类,又想代理它,就需要一个工厂,建议程序员使用工厂,而不是直接调用基类的构造函数。

在工厂代码中,您可以返回一个作为基类代理运行的子类。

请记住,这只是一个建议。您不能阻止程序员使用公共构造函数手动创建类的实例。

于 2015-07-16T13:27:45.907 回答
0

以下是我们可以使用父类对象调用子类方法的简单方法(使用类型转换):

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";
    }
}
于 2016-11-20T05:05:49.790 回答