2017-09-29 1 views
0

スーパークラスの共有メソッドの共通の値を格納するために親クラスを使用することは可能ですが、依然としてサブクラスの個々のコンストラクタを使用しますkを異なるサブクラスの2つのコンストラクタのパラメータからスーパークラスに変換しますが、依然として2つのサブクラスの個々のコンストラクタと異なるコンストラクタを呼び出します)。superを呼び出して値を格納するが、サブクラスコンストラクタを使用する

例えばサブクラスで

:スーパークラスで

public pictureImpl(Picture source, int x, int y, int height, int width) { 
    super(height, width); 
    "rest of constructor using all parameters" 
} 

:ここ

public superPicture(int height, int width) { 
    heightValue = height; 
    widthValue = width; 
} 

、まだサブクラスのために括弧で一部を使用することも可能である(すなわちれますスーパーを使用して値を格納した後でも、コンストラクタの残りの部分を呼び出すことは可能ですか?

+1

私はあなたが何をしようとしているのかわからないので、実際の例を作るべきだと思います。 – Jack

+0

@jackは例を追加しました。ありがとうございます。スーパークラスのコンストラクタの – hliu

答えて

0

これは、基本クラスの保護されたコンストラクタのための一般的な使用例である:

class Base { 
    private final int val; 
    protected Base(int val) { 
     this.val = val; 
    } 
    public int getVal() { 
     return val; 
    } 
} 
class Derived1 extends Base { 
    public Derived1(String name, int val) { 
     super(val); 
     ... 
    } 
    ... 
} 
class Derived2 extends Base { 
    public Derived2(int val, Date timestamp) { 
     super(val); 
     ... 
    } 
    ... 
} 
+0

は、最終的に保護されていることは何ですか?ありがとう! – hliu

+0

@hliu 'protected'は、このコンストラクタを使って直接' Base 'を構築できないことを意味します。 'void main(String [] args){Base b = new Base(1); } 'はコンパイルされません。 'val'宣言の' final'はフィールドを読み取り専用にします。 – dasblinkenlight

0

方法superPictureがスーパークラスでパブリックであり、クラスを拡張に使用するために継承されます。

簡単に呼び出すことができます。

オーバーライドする場合は、super.superPicture(width、height)でアクセスすることもできます。

関連する問題