0

プロジェクトをデプロイした後、クライアントが初めてTestServletにリクエストを送信するたびに、サーバーはtestServletオブジェクトを作成し、最初のinit()メソッド(init(ServletConfig config))を呼び出します。次に、JVMはTestServletの最初のinit()メソッドをチェックします。これは使用できないため、スーパークラスHttpServletをチェックインします。最初のinitメソッドも使用できません。次に、JVMはHttpServletのスーパークラスをチェックします。つまり、GenericServletクラスの最初のinit()が使用可能です。次に、JVMがそれを実行し、2番目のinit()がTestServletで直接利用可能であるため、2番目のinit()を呼び出し、JVMがそれを実行します。

Q.上記のパラグラフに関して、GenericServletの1番目のinit()が内部で空のinit()を呼び出すため、GenericServletの1番目のinit()がTestServletクラスの2番目のinit()を呼び出す方法を知りたいです。

4

1 に答える 1

1

それがポリモーフィズムの基本原則です。init()はオーバーライド可能なメソッドであり、サーブレットは init() メソッドをオーバーライドする TestServlet のインスタンスであるため、メソッドの実装TestServletが使用されます。

次の例のように:

public class Animal {
    public void saySomething() {
        // do nothing
    }

    public void saySomethingElse() {
        saySomething();
    }
}

public class Dog extends Animal {
    @Override
    public void saySomething() {
        System.out.println("bark!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.saySomething(); // bark!, because the animal is a dog

        animal.saySomethingElse(); // still bark!, because the animal is a dog
                                   // and saySomethingElse() calls the animal's
                                   // polymorphic saySomething() method.
    }
}
于 2012-12-16T15:37:19.997 に答える