我有一些两个子类共有的方法,所以我把它们放在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类中实现此方法,以便程序将检测它应该创建的对象的差异。
答案 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);
}
}