例:クラスまたはクラスcustomer
である 2 つの子クラスを持つクラスがあります。インスタンス変数として持っています。インスタンス変数としても持っていますか? 顧客層はどうですか?guest
signed-up users
Customer class
username
guest class
username
methods
2 に答える
すべての属性とメソッドが子クラスに存在するという意味で、Java での継承は常に完全です。「スーパー」クラスでプライベートとして宣言されたものは、サブクラスでは表示されませんが、サブクラスにはまだ存在します。
ある種の部分継承について考えている場合、最善の方法はクラス モデルを再考することです。すべての特定のケースに適用できる別の基本クラスを作成します (そのためusername
、Customer クラスに属性がある場合は、すべての顧客が 1 つ持っていることを確認する必要があります)。Guest オブジェクトにその属性を持たせたくない場合は、単にそれを Customer から削除し、SignedUpCustomer クラスで宣言します。Java インターフェイスは、他の場合にも役立つ場合があります。
Guest クラスと SignedUpUsers クラスは、アクセス レベルが「プライベート」またはデフォルト (アクセス レベルが指定されていない) としてマークされていない Customer クラスからすべてのクラス メンバー (メソッドと変数) を継承します。
したがって、あなたの例では、ユーザー名変数のアクセスレベルがパブリックまたは保護されている場合、それは継承されます。同じことがすべてのメソッドに当てはまります。
String username; // will not be inherited
private String username; // will not be inherited
protected String username; // will be inherited
public String username; // will be inherited