1

サブクラスが基本クラスのコンストラクターを明示的に呼び出すことを余儀なくされているのは意味がないようです。ユーザーが独自のコンストラクターを作成でき、基本クラスに限定されない場合、より柔軟になります。JAVAでこの動作が強制される理由を誰でも教えてくれますか? これの良い点は何ですか?

class A
{                                                                                                    
  public A(String s)
  { 
    System.out.println(s);
    System.out.println("BASE parameter constructor");
   }   
}

class C extends A
{  
       public C(String s)   
       {
        super(s);// why here compiler force to call constructor of base class
        System.out.println("Sub parameter constructor");
        }
}
4

3 に答える 3

5

基本クラスには、デフォルトでサブクラスから呼び出される引数なしのコンストラクターがないためです。

こうするだけなら

public C(String s)
    {
        System.out.println("Sub parameter constructor");
    }

次に、スーパーコンストラクターへのデフォルトの呼び出しがそこに配置され、次のようになります

public C(String s)
    {
    super();
    System.out.println("Sub parameter constructor");
    }

ただし、クラスに他のコンストラクターが提供されていない場合にのみ提供されるパラメーター化されたコンストラクターを既に定義しているため、コンパイラーは引数なしのコンストラクターを提供しません。

于 2013-11-13T06:35:40.403 に答える