簡體   English   中英

方法重載未按預期工作

[英]Method overloading is not working as expected

在Java函數重載是函數參數的類型或數量是我不正確請糾正我

我正在進行一些測試,我發現一些不正確的Java重載,如public static void doSomeThing()public static int doSomeThing()

這兩個函數都是相同的,它不應該編譯但它正在運行。

喜歡這段代碼。

package com.sudeep.test;

public class StaticFunctionOverload {
    public static void main(String arg[]) {
        doSomeThing();

    }

    public static int doSomeThing() {
        System.out.println("Im in int block");
        return -1;
    }

    public static void doSomeThing() {
        System.out.println("Im in void block");
    }

}

代碼出錯但仍在eclipse上運行

方法的簽名必須不同:

Java編程語言支持重載方法,Java可以區分具有不同方法簽名的方法。 這意味着如果類中的方法具有不同的參數列表,則它們可以具有相同的名稱(有一些資格,將在標題為“接口和繼承”的課程中討論)。

讀這個:

https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

所以,這將起作用,例如:

package com.sudeep.test;

public class StaticFunctionOverload {
    public static void main(String arg[]) {
        doSomeThing();

    }

    public static int doSomeThing() {
        System.out.println("Im in int block");
        return -1;
    }

    public static void doSomeThing(int param1) {
        System.out.println("Im in void block with " + param1);
    }

}

正如已經多次提到的那樣,它不應該編譯。 但是我也看到了你的截圖以及它在你的計算機上實際運行時的混亂。

我認為你所看到的是eclipse的一個“特性”, 當它遇到錯誤時運行一個較舊的類 我假設您在添加void之前已經使用int方法構建並運行該類。

如果是這種情況,您可以做以下幾件事:

  1. 如果您確實希望保留此功能(在存在錯誤時啟動舊版本),則可以執行清理(菜單: 項目 > 清除... )以清除以前構建的版本。 如果您現在嘗試運行,Java將停止並抱怨它無法構建您的源。
  2. 如果您認為此“功能”可能實際上是有害的,請轉到窗口>首選項>運行/調試>啟動>如果項目包含錯誤則繼續啟動>提示

在此輸入圖像描述

暫無
暫無

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

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