簡體   English   中英

Java-具有重載方法的抽象類互相調用

[英]Java - Abstract class with overloaded methods calling each other

我有一個帶有重載方法的類。

   public class MyCal extends GregorianCalendar {

   //constructor
   public MyCal(Date date) {
     super();
     setTime(date);
   }

   boolean isSameDay(Date date) {
      return (isSameDay(new MyCal(date))) {
   }

   boolean isSameDay(MyCal cal) {
       if (...) {
         return true;
       } else {
         return false;
       }
   }

   //abstract String toString(String pattern) {};
   //if I have this I can't call new MyCal(date) from above
}

現在,我希望類是抽象的(需要子類實現其他一些方法),並且仍然避免第一個isSameDay方法(調用第二個方法)的所有邏輯。 如果只是這種方法,我可以做得到,但是這種情況在許多其他重載方法上也存在。

該類是抽象類,我無法實例化它,因此isSameDay(date)方法將報告一個錯誤...並且確實不希望所有方法都具有邏輯,這將使該類龐大且難於執行保持。 有人能做到這一點嗎? 先感謝您。

刪除需要實例化抽象類的邏輯。 在上面的示例中,您可以通過反轉定義的方法的角色來有效地做到這一點:

boolean isSameDay(Date date) {
    if (...) {
        return true;
    } else {
        return false;
    } 
}


boolean isSameDay(MyCal cal) {
    if(cal == null) return false;
    return (isSameDay(cal.getTime()));
}

根據需要擴展到其他方法。

您可以定義一個方法getMyCal(date)

public class MyCal extends GregorianCalendar {

    abstract MyCal getMyCal(Date date);

    // further implementation
}

而不是使用new MyCal(date) ,可以在方法中使用getMyCal(date)

抽象類的實現只需實現getMyCal方法。

public ConcreteCal extends MyCal {

    MyCal getMyCal(Date date) {
        return new ConcreteCal(date);
    }
}

我認為他的意思是他想實例化父類中派生類的對象。

我建議做這樣的事情:

家長班

public class MyCal extends GregorianCalendar {  
(...)
boolean isSameDay(Date date) {  
   return (isSameDay(newInstance())) {  
   }  
abstract MyCal newInstance(){}
(...)
}

派生類

public class MyDerivedCal extends MyCal{  
(...)
abstract MyCal newInstance(){
   return new MyDerivedCal();
   }
(...)
}

原諒我可能的Java語法錯誤....

很難說出您的要求,但我會猜測...

如果要使此類抽象,但仍要實例化,則不能(不能實例化抽象類),但是可以這樣做:

public abstract class MyCal ... {
    ...
    abstract String toString(String pattern);
}

public class MyCalBasic extends MyCal {
    String toString(String pattern) {
        // some vanilla impl
    }
}

當您需要類的“香草”版本時,只需使用MyCalBasic而不是MyCal

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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