1

プロジェクトで .class ファイルを拡張する必要があり、単純なメソッドをオーバーライドする必要があります。いくつかの .jar パッケージにあるクラス A があるとします。クラス AI の test() メソッドをオーバーライドしたいのは、A のサブクラス B を作成してオーバーライドすることです。今、私のアプリケーションパッケージ(.jarです)で、クラスAのオブジェクトが作成されます。このオブジェクトは、クラスAのメソッドを呼び出します。しかし、クラスBのメソッドを呼び出したいです。

私の考えは、アプリケーション全体でオブジェクトの作成をプロキシすることです。その時点でクラスAのオブジェクトが作成されるたびに、クラスBのオブジェクトを作成し、クラスAに引き渡されるように構成したいと考えています。

このタイプのメカニズムを実装するのを手伝ってください。

4

2 に答える 2

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 に答える
0

クラスのインスタンス化をブロックまたは制御できるのは、コンストラクターがprivateの場合のみです。

元の基本クラスを上書きできず、それをプロキシしたい場合は、ファクトリが必要であり、基本クラスのコンストラクタを直接呼び出す代わりに、ファクトリを使用するようプログラマにアドバイスします。

ファクトリ コードでは、基本クラスのプロキシとして動作するサブクラスを返すことができます。

これは単なるアドバイスであることを忘れないでください。プログラマーがパブリック コンストラクターを使用してクラスのインスタンスを手動で作成するのをブロックすることはできません。

于 2015-07-16T13:27:45.907 に答える