如何使用超类调用泛型方法

时间:2013-04-17 12:54:13

标签: java

我有一些两个子类共有的方法,所以我把它们放在Abstract超类中,但有一个方法使用一个带有两个不同值的变量,所以我很困惑如何实现该方法的代码如下: / p>

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 Class使用相同的方法,但 remainingCredit的值为45 ,而它们共有的所有方法都在此AbstractMember类中实现,该类实现成员接口。但是当我尝试从其他类调用这些方法时,我必须像这样在库类中初始化AbstractMember的对象

Member member = new StandardMember();

这非常糟糕,因为我无法使用StandardMember对象来运行相同方法的PremiumMember对象版本。所以,要么我应该创建PremiumMember类的新对象,要么我不知道该怎么做。但是如果我创建了两个对象,那么这个成员对象在borrowHolding方法中使用,这个方法基本上是Library Class中的级联方法,后者又调用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);        
    }

问题是我无法创建两个对象,因为在运行时我只能调用一个方法。帮助我如何在Abstract类中实现此方法,以便程序将检测它应该创建的对象的差异。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您的Member抽象类的字段remainingCredit必须在一个子类中为30,在另一个子类中为45

使用受保护的构造函数。

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);
    }
}