2017-11-24 1 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

아이들이 접근 할 필요가있는 유일한 아이들 인 경우 getter를 '보호'로 설정하는 것이 좋습니다. – Hulk

+0

예. 할 일이 옳은 것 같습니다. –

+0

getter가'protected'이면이 경우에는 괜찮을 것입니다. 그러나 나중에 참조 할 수 있도록 [Demeter의 법칙] (http://www.yegor256.com/2016/07/18/law-of-demeter.html)을 참조하십시오. 인스턴스 변수에 대한 직접 액세스를 제공하는 것은 권장하지 않습니다. –

관련 문제