1

クラス B を Java の新しいクラス C に派生させようとしています。基本クラスのコンストラクターでは、報告されない例外をスローまたはキャッチする必要があります。しかし、super(..) を try/catch 内に配置しようとすると、super の呼び出しはコンストラクターの最初のステートメントでなければならないと言われます。誰もこれを回避する方法を知っていますか?

public class C extends B
{
   //Following attempt at a constructor generates the error "Undeclared exception E; must be caught or declared
   //to be thrown
    public C(String s)
    { 
         super(s);
    }

    //But the below also fails because "Call to super must be the first statement in constructor"
    public C(String s)
    {
         try
         {
              super(s);
         }
          catch( Exception e)
         {
         }
     }
 }

どうもありがとう、クリス

4

4 に答える 4

1

私が知っている唯一の方法は、サブクラスコンストラクターでも例外をスローすることです。

public class B {
    public B(String s) throws E {
       // ... your code .../
    }
}

public class C extends B {
   public C(String s) throws E { 
       super(s);
   }

}

于 2013-02-26T17:16:03.540 に答える
1

throws句を使用して、いつでもinコンストラクターの署名を宣言できます。Exception

public C(String s) throws WhatEverException
    {
于 2013-02-26T17:14:39.127 に答える
0

最初のステートメントでスーパーコンストラクターを呼び出さずにコンストラクターを定義することはできません。可能であれば、ランタイム例外をスローできます。try/catchブロックを作成する必要はありません。

于 2013-02-26T17:16:58.323 に答える
0

さて、あなたが理解する必要がある3つのことがあります。

  1. 子コンストラクターでは、super が最初のステートメントでなければなりません。
  2. 親クラスのメソッドが例外をスローした場合、子クラスにはそれをキャッチするか、例外を親クラスにスローするオプションがあります。
  3. 子クラスの例外のスコープを縮小することはできません。

例 -

public class Parent {

public Parent(){
    throw new NullPointerException("I am throwing exception");
}

public void sayHifromParent(){
    System.out.println("Hi");
}
}


public class Child extends Parent{

public Child()throws NullPointerException{

    super();

}
public static void main(String[] args) {
    Child child = new Child();
    System.out.println("Hi");
    child.sayHifromParent();

}

}
于 2013-02-26T17:32:08.820 に答える