Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有抽象类的Setter_Java - Fatal编程技术网

Java 具有抽象类的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

我不知道如何从另一个类调用抽象类中的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;
    }
}

如何从库中设置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()