2017-11-24 27 views
0

タイプ階層モデル銀行口座の構築。Java ArrayList <String>抽象クラス内

はもともとただ

public class Account 
{ 
    private ArrayList<String> transactions 

    public void logTransaction(String transactionData) 
    { 
    ... 
    } 
} 

を持っていた。しかし、今のクラスは、階層構造に拡張されています

public abstract class Account 
{ 
    private ArrayList<String> transactions 

    private abstract void logTransaction(String transactionData); 
} 

public class ChequingAccount extends Account 
{ 
    public void logTransaction(String transactionData) 
    { 
    ... 
    } 
} 

しかし、私はちょうど適切に子メソッドで配列リストで取得する方法を見つけ出すことはできません?命令は、親抽象クラスに配列リストを残すことですが、これまでの回答を検索することは、これが良い習慣ではないと言いますか?

私の指示はベストプラクティスに反するのか、何か不足していますか?

+0

- あなたが行うときのようなもの、あなたの 'transactions'インスタンス変数を宣言するように' ArrayListの 'あなたは、一般的に悪い習慣と考えられている' List'の具体的な実装にコーディングされています。基礎となる実装を変更する必要がある場合、このクラスに依存するすべてのクラスではなく、このクラスだけが変更されるように、インターフェイスにコードを記述する必要があります。 –

答えて

0

ゲッターやセッターは何が必要です:)

public class Account 
{ 
    private ArrayList<String> transactions 

    public void logTransaction(String transactionData) 
    { 
    ... 

    } 

    public ArrayList<String> getTransactions() 
    { 
    return transactions; 
    } 
} 

その後、あなたの子クラスであなたはsuper.getTransactions()メソッドを呼び出します。今後の参考のために

public class ChequingAccount extends Account 
{ 
    public void logTransaction(String transactionData) 
    { 
    super.getTransactions(); 
    } 
} 
+0

子供がアクセスする必要のある唯一の子供であれば、ゲッターを「保護する」方が良いでしょう。 – Hulk

+0

はいこれは正しいことです:) –

+0

getterが 'protected'の場合、この場合はおそらく問題ありません。しかし、将来的には[Demeterの法則](http://www.yegor256.com/2016/07/18/law-of-demeter.html)を参照するために、インスタンス変数への直接アクセスを提供することはお勧めできません。 –

関連する問題