[英]Setter with Abstract Class
我不確定如何調用另一個類的抽象類中的setter方法。 這是我所擁有的:
public abstract class Media {
private String loanedTo;
public String getLoanedTo() {
return loanedTo;
}
public void setLoanedTo(String loanedTo) {
this.loanedTo = loanedTo;
}
private Date dueOn;
public Date getDueOn() {
return dueOn;
}
public void setDueOn(Date dueOn) {
this.dueOn = dueOn;
}
}
public class Library {
public void loan(Loanable item, String name){
Calendar calcDueDate = Calendar.getInstance();
calcDueDate.add(Calendar.DAY_OF_MONTH, item.getDaysToLoan());
dueOn = calcDueDate.getTime();
loanedTo = name;
}
}
如何設置不擴展無法實例化的Media的Library中的Dueton和loanedTo變量? 搜索時找不到答案。 剛開始學習這些東西。
好吧,你必須做一個具體的課程,例如
public class Book extends Media {
}
如果您從來沒有抽象類的具體子類,那么您的抽象類將永遠無法使用。
這里可能存在一些誤解。
返回到要求您解決的問題,並確保您不打算將Library實現為擴展Media的類。
如果嘗試實例化抽象Media類,則會失敗(因為您無法實例化抽象類)。
如果您有一個具體的類,請說Book
,並extends Media
,然后可以調用book.setLoanedTo("Bob")
和book.setDueOn(someJavaDate)
。
嘗試這樣的事情:
public abstract class Media {
private String loanedTo;
public String getLoanedTo() {
return loanedTo;
}
public void setLoanedTo(String loanedTo) {
this.loanedTo = loanedTo;
}
private Date dueOn;
public Date getDueOn() {
return dueOn;
}
public void setDueOn(Date dueOn) {
this.dueOn = dueOn;
}
}
public class ConcreteMedia extends Media {
private String loanedTo;
public String getLoanedTo() {
return loanedTo;
}
public void setLoanedTo(String loanedTo) {
this.loanedTo = loanedTo;
}
private Date dueOn;
public Date getDueOn() {
return dueOn;
}
public void setDueOn(Date dueOn) {
this.dueOn = dueOn;
}
}
public class Library {
public void loan(Loanable item, String name){
Calendar calcDueDate = GregorianCalendar.getInstance();
calcDueDate.add(Calendar.DAY_OF_MONTH, item.getDaysToLoan());
Media concrete = new ConcreteMedia();
dueOn = concrete.setDueOn(calcDueDate.getTime());
loanedTo = concrete.SetLoanedTo(name);
}
}
我認為您的Library.loan方法的Item參數需要具有您在抽象Media中實現的方法。 使用方法聲明創建一個可貸接口。 您可以讓Media實現該接口,並根據需要保持抽象。
public interface Loanable {
String getLoanedTo();
void setLoanedTo(String loanedTo);
Date getDueOn();
void setDueOn();
}
public abstract class Media implements Loanable {
private String loanedTo;
public String getLoanedTo() {
return loanedTo;
}
public void setLoanedTo(String loanedTo) {
this.loanedTo = loanedTo;
}
private Date dueOn;
public Date getDueOn() {
return dueOn;
}
public void setDueOn(Date dueOn) {
this.dueOn = dueOn;
}
}
public class Library {
public void loan(Loanable item, String name){
Calendar calcDueDate = Calendar.getInstance();
calcDueDate.add(Calendar.DAY_OF_MONTH, item.getDaysToLoan());
dueOn = calcDueDate.getTime();
loanedTo = name;
item.setDueOn(dueOn);
item.setLoanedTo(loanedTo);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.