1

Java EE に基づいて webApplication を開発しています。

1 回限りの操作 (データベース呼び出し) が必要な抽象クラスがあります。

以下のサンプルコードでは、コンストラクター内に貼り付けましたが、コンストラクターが呼び出されない理由がわかりません。

これを解決する方法を教えてください。

public abstract class Preethi {

 Preethi()
 {
    System.out.println("hirerew");
 }

 public static void main(String args[])
 {
    int a  = 12;

    if(a==0)
        System.out.println("a");

    if (a==12)
        System.out.println("12");
 }

}
4

5 に答える 5

1

抽象クラス Preethi のインスタンスを作成することはありません。コンストラクターが呼び出されることを期待するのはなぜですか? 非抽象サブクラスを作成し、そのインスタンスを作成すると、コンストラクターが呼び出されます。main は static であり、Preethi を実現せずに呼び出すことができます。

public class X extends Preethi
{ /* Your implementation here */}

次に、メインで:

public static void main(String [] args)
{
  Preethi preethi = new X(); // This will call the constructor of Preethi
}
于 2012-08-30T14:05:43.917 に答える
0

main()メインクラスをインスタンス化せずにメソッドが呼び出されたため、コンストラクターは呼び出されていません。

Preethiそれを呼び出すには、オブジェクトを明示的に作成する必要があります。

アップデート。anio が示唆するように、サブクラスPreethi化してインスタンス化する必要があります。

于 2012-08-30T14:06:56.313 に答える
0

以下のコードを参照してください。

public abstract class Preethi {

    // constructor:
    Preethi() {
        System.out.println("hirerew");
    }

    public static void main(String[] args) {
        // call the constructor:
        new Preethi() {};  // "{}" needed because our class is abstract.
    }

}

ここでのポイントは、常に新しいクラスを作成する必要はなく、コンストラクターの隣に「1 回限りの」クラスを定義できるということです。例えば:

public abstract class A {
    public abstract void foo();
    public A() { foo(); }
}

次のことができます。

A a = new A() { 
    public void foo() { 
        System.out.println("hello"); 
    } 
};

出力は単に「hello」になります。同様の方法をインターフェースにも利用できます。

于 2012-08-30T14:08:51.320 に答える
0

抽象クラスを使用してオブジェクトをインスタンス化することはできませんが、Java のランタイム ポリモーフィズムへのアプローチはスーパークラス参照を使用して実装されるため、抽象クラスを使用してオブジェクト参照を作成することはできます。したがって、SUBCLASS オブジェクトの POINT に使用できるように、抽象クラスへの参照を作成できる必要があります。

抽象化しないようにするか、抽象クラスで super() を呼び出すサブクラスを作成できます。

于 2012-08-30T14:10:55.010 に答える
0

のオブジェクトを作成していませんPreethi。コンストラクターを呼び出すには、クラスから抽象キーワードを削除し、そのオブジェクトを作成する必要があります

または、匿名の内部クラスを作成し、そのオブジェクトを次のようにします。

new Preethi() {
   // abstract method impl
};

または、Preethi のサブクラスを作成し、そのオブジェクトを作成します。

参考までに: 任意の抽象クラスまたはインターフェイスのオブジェクト参照を作成できます。それらのオブジェクトを作成することはできません。

そして、メインクラスを抽象化することは本当に意味がないと思います。お願いします(間違っていたら教えてください)

于 2012-08-30T14:08:46.960 に答える