0

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クラスに実装して、プログラムが作成するオブジェクトの違いを検出する方法を教えてください。

4

1 に答える 1

1

私があなたを正しく理解していれば、あるサブクラスと別のサブクラスにある必要があるフィールドを持つMember抽象クラスがあります。remainingCredit3045

保護されたコンストラクターを使用します。

public abstract class Member {

    private int remainingCredit;
    // Other members
    // getters and setters

    protected Member(String memId, String memName, int remainingCredit) {
        this.memId = memId;
        this.memName = memName;
        this.remainingCredit = remainingCredit;
    }
}

public StandardMember extends Member {

    public StandardMember(String memId, String memName) {
        super(memId, memName, 30);
    }
}

public PremiumMember extends Member {

    public PremiumMember(String memId, String memName) {
        super(memId, memName, 45);
    }
}
于 2013-04-17T13:03:52.763 に答える