簡體   English   中英

是否可以在Java中重寫同一類中的方法?

[英]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.

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