1

前者を拡張するStaffとの2 つのクラスがあります。AdvancedStaff

Staffこのコンストラクタがあります:

public Staff (String number, String title, String name, String role, char level) {
        staffNumber = number;
        staffTitle = title;
        staffName = name;
        staffRole = role;
        payScaleLevel = level;
    }

すべてのインスタンス変数がプライベートに設定されていることに注意してください。

一方、次のAdvanced Staffコンストラクタがあります。

public AdvancedStaff (String number, String title, String name) {
        super(number, title, name);
        role = "Entry level Advanced Staff"; 
        level = 'A';
    }

ただし、これにより、Staffコンストラクターに対して「シンボルが見つかりません」というエラーがスローされます。

使用してみましsuper.staffRole = "Entry level Advanced Staff";たが、スーパークラスのプライベート スコープがこれを妨げています。

フィールドString roleとコンストラクターchar levelを追加AdvancedStaffすると、スーパー コンストラクターを呼び出すことができることがわかりましたが、サブクラス コンストラクターにすべての引数を渡さずにスーパー コンストラクターを呼び出す方法があるかどうか疑問に思っています。

4

3 に答える 3

3

すべての引数をコンストラクターに提供する必要があります。

あなたの場合、 のコンストラクターを呼び出すことはできますが、次のようにいくつかのデフォルト値を指定する必要Staffがあります。

super(number, title, name, "Entry level Advanced Staff", 'A');

これは、 のコンストラクターで既に行っていることと同じ作業を行いますが、コンストラクターを介して渡すため、プライベート変数の値を設定するクラスになるAdvancedStaffだけです。Staff

余談ですが、サブクラスからこれらのプライベート変数にアクセスする予定がある場合は、protected代わりに作成する必要があります。

于 2013-10-17T00:03:45.020 に答える
1

@WilliamGaul のアドバイスに従うか、渡したい 3 つの引数のみを受け入れる新しいコンストラクターを親に作成する必要があります。どちらを選択するかは、コンテキストによって異なります。

于 2013-10-17T00:07:24.943 に答える
1

いいえ、関数/コンストラクターにすべての引数を提供する必要があります

于 2013-10-17T00:01:21.273 に答える