2017-12-26 5 views
0

私はAbstractXYZEntityから派生したエンティティはほとんどありません。すべてのエンティティはXYZドメインに属し、XYZIdはLong型です。はデフォルトのコンストラクタを持たない親クラスを継承できません

私はデータ型class XYZId extends Longを作成したいと、各エンティティは、その後、以下のようになります -

public class XYZEntityOne extends AbstractXYZEntity { 
    XYZId entityOneId; 
} 

問題は、私はXYZIdを作成しようとすると、コンパイラはエラー以下の私を示している -

ありjava.lang.Longで使用可能なデフォルトのコンストラクタがありません

私は、デフォルトのコンストラクタはLongそれは意味を持ちません。 1つはLongのインスタンスを作成する前にいくつかの番号を持つ必要があります。

しかし、それではデフォルトのコンストラクタを持たないデータ型を作成できないのはなぜですか?

+1

[Long](https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html)は「final」と宣言されています。それを拡張することはできません。 –

+0

@Aominèああ、私はそれを得た。スーパー感謝。しかし、そこにはLong上に表面的なデータ型の名前を作成する方法がありますか? – comiventor

+0

継承よりも優先度の高い構成。 –

答えて

2

Javaでは、暗黙のコンストラクタ継承はありません。 superキーワードを使用して明示的に親のコンストラクタを呼び出さない場合は、デフォルトのコンストラクタを呼び出す(つまり、引数なしでsuper()を呼び出すのと同じです)と仮定します。もちろん、親クラスにはデフォルトのコンストラクタです。例えば:

public class Parent { 
    // Note: No default constructor 

    public Parent(String s) { 
     // Do something with s 
    } 
} 

public class Child extends Parent { 
    public Child(String s) { 
     super(s); 
    } 
} 

java.lang.Longfinalで、あなたはとにかくそれを拡張することはできませんので、これは、しかし、この場合には、多少議論の余地が議論のです。代わりにlongデータメンバーを含むクラスをXYZIdクラスに作成できます。

関連する問題