2 つのサブクラスに共通するいくつかのメソッドを持っているので、それらを抽象スーパークラスに入れましたが、2 つの異なる値を持つ変数を使用するメソッドが 1 つあるため、そのメソッドを実装する方法がわかりません。コードは次のようになります。
StandardMember クラスは、開始時に、 remainingCredit=30の独自の異なる値を持つこのメソッドを取得しました
public void borrowHolding(int holdingId)
throws InsufficientCreditException, MultipleBorrowingException {
// TODO Auto-generated method stub
System.out.println("Hello");
Holding tempHolding = Library.libCollection.getHolding(holdingId);
if (Library.libCollection.getHolding(holdingId) != null) {
if (tempHolding.isOnLoan()) {
System.out.println("Can not be issued Currently on Load");
} else {
System.out.println("Can be issued");
remainingCredit-=tempHolding.getDefaultLoanFee();
System.out.println(getRemainingCredit());
tempHolding.setLoanCheck(true);
currentlyBorrowedHolding.put(holdingId, tempHolding);
System.out.println(remainingCredit);
System.out.println(holdingId);
}
}
PremiumMember クラスは同じメソッドを取得しましたが、remainingCredit の値は 45です。一方、それらに共通するすべてのメソッドは、 Member インターフェイスを実装するこの AbstractMember クラスに実装されています。しかし、他のクラスからこれらのメソッドを呼び出そうとすると、このように Library Class で AbstractMember のオブジェクトを初期化する必要があります
Member member = new StandardMember();
StandardMember オブジェクトを使用して同じメソッドの PremiumMember オブジェクトのバージョンを実行できないため、これは非常に悪いことです。したがって、PremiumMember クラスの新しいオブジェクトを作成するか、どうすればよいかわかりません。しかし、2 つのオブジェクトを作成すると、このメンバー オブジェクトは、基本的には Library クラスのカスケード メソッドである BorrowHolding メソッドで使用され、次に Member Interface の BorrowHolding メソッドを呼び出します。
public void borrowHolding(int holdingId) throws InsufficientCreditException, MultipleBorrowingException {
if(libCollection.holdingMap==null){
System.out.println("Collection is Empty");
}
if(libCollection.holdingMap.containsKey(holdingId))
member.borrowHolding(holdingId);
}
問題は、実行時に 1 つのメソッドしか呼び出せないため、2 つのオブジェクトを作成できないことです。このメソッドをAbstractクラスに実装して、プログラムが作成するオブジェクトの違いを検出する方法を教えてください。