![](/img/trans.png)
[英]Is it possible to overload abstract methods in an abstract Java class, but implement only one of the overloaded methods in subclass?
[英]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.