[英]Is it possible to override a method in same class in Java?
看一下以下代碼示例:
public class Test{
public static void main(String[] args){
System.out.println(new Test());
System.out.println(new Test(){
public String toString(){
return "manual override";
}
});
System.out.println(new Test(){
public String gm(){
return "manual gm";
}
}.gm());
} //end of main method
public String gm(){
return "gm";
}
}
可能存在一些論點,即toString()
方法在完全不同的匿名內部類中被重寫。
但是,最重要的代碼仍然位於同一類中。 因此,是否有理由得出結論,在某些情況下(如上所述),可以覆蓋相同類中的方法?
首先,您尚未在Test.java
類中定義toString。
其次,當您創建一個匿名類時,從概念上講,它就像創建一個子類。 因此,只要父方法不是最終方法,就可以覆蓋匿名類。
主要是,否則無法在同一類中進行覆蓋。
答案是否定的,您不能在一個類中覆蓋相同的方法。 匿名內部類是不同的類。
上面的代碼重寫Object類的toString()方法。 因此,您不能說它在同一類中重寫。 現在,它也覆蓋了超類方法,這里的超類是Object ,它是所有類的超類。
不,您只能覆蓋子類中的方法。
public String toString(){
return "manual override";
}
在您的情況下,您將覆蓋Object's
toString()
方法而不是Test
類方法。
在一個類中,我們不能擁有具有相同簽名的方法。 這是因為在同一個類中不需要覆蓋方法。
因此無法在同一個類中重寫方法,就好像我們要使用相同的方法名一樣,可以通過更改簽名來重載方法。
關於“現實用例”,我確實在Manning的“ JUnit Recipes” 2005的2.5節中找到了上述程序的實際用法。
public class Counter {
private int count;
// a simple integer instance variable
public Counter( ) { }
// default constructor (count is 0)
public Counter(int initial) { count = initial; }
// an alternate constructor
public int getCount( ) { return count; }
// an accessor method
public void increment( ) { count++; }
// an update method
public void increment(int delta) { count += delta; }
// an update method
public void reset( ) { count = 0; }
// an update method
}
這個函數在同一個類下不重寫嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.