簡體   English   中英

二傳手與抽象類

[英]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 {
}

如果您從來沒有抽象類的具體子類,那么您的抽象類將永遠無法使用。

這里可能存在一些誤解。

  1. 首先,您的“抽象”類實際上不是抽象的(沒有未實現的方法簽名)。
  2. 您的庫類將需要以某種方式引用擴展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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM