Java 具有抽象类的Setter
我不知道如何从另一个类调用抽象类中的setter方法。以下是我所拥有的:Java 具有抽象类的Setter,java,Java,我不知道如何从另一个类调用抽象类中的setter方法。以下是我所拥有的: public abstract class Media { private String loanedTo; public String getLoanedTo() { return loanedTo; } public void setLoanedTo(String loanedTo) { this.loanedTo = loanedTo; } pr
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;
}
}
如何从库中设置dueOn和loanedTo变量,该库不扩展无法实例化的媒体?我搜索时找不到答案。刚刚开始学习这些东西。好吧,你必须制作一个像
public class Book extends Media {
}
如果您从来没有抽象类的具体子类,那么您的抽象类就永远不能被使用。这里可能有一些误解
请回头查看要求您解决的问题,并确保您不打算将库作为扩展媒体的类来实现 如果试图实例化抽象媒体类,则会失败(因为无法实例化抽象类)
如果您有一个具体的类,比如说
Book
,并让它extensedmedia
,那么您可以调用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 param需要具有在抽象媒体中实现的方法。创建一个可与方法声明一起使用的接口。如果需要,可以让媒体实现接口并保持抽象
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);
}
仅供参考,
Calendar
是一个abstract
类。您需要一个父类型的对象Media
。谢谢。现在它有意义了。只是需要一点提示来帮我弄明白。德克的答案是整本书的宣言。你实际上不需要其他任何东西。如果您的库借出了CD,那么您可以编写公共类CD扩展媒体{}
,并拥有一个全新的类。然后在Main方法中,可以说Book Book=newbook()代码>或CD myCD=new CD()代码>