簡體   English   中英

編譯器錯誤,但程序執行正常

[英]Compiler error but program executes fine

我對下面的代碼感到困惑,Eclipse將編譯器錯誤顯示為“此靜態方法無法從Super中隱藏實例方法”,但是在執行時可以正常工作。

package com.journaldev.java;

public class Test {

    public static void main(String[] args) {
        Super s = new Subclass();
        s.foo();
    }
}

class Super {
    void foo() {
        System.out.println("Super");
    }
}

class Subclass extends Super {
    static void foo() {
        System.out.println("Subclass");
    }

}

請參見下圖的輸出,有人可以澄清嗎?

為什么即使編譯器錯誤也會運行程序?

Eclipse允許您運行代碼的“大部分”,即使它不能全部正確編譯-盡管它通常會提示您。 通常,未編譯的代碼只會引發異常以指示編譯失敗。

在這種情況下,您永遠不會最終調用Subclass.foo ,因此您不會看到編譯錯誤異常。

如果將main的第一行更改為:

Subclass s = new Subclass();

......然后它嘗試調用破法,你會得到的輸出是這樣的:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    This static method cannot hide the instance method from Super

    at sandbox.Subclass.foo(Test.java:18)
    at sandbox.Test.main(Test.java:7)

就個人而言,我強烈建議您在嘗試運行某些程序時單擊“取消”,並且Eclipse告訴您它存在編譯時錯誤。 如果您以前單擊過“始終啟動而不詢問”,則需要進入首選項,然后在“啟動”下將“如果項目包含錯誤繼續啟動”從“始終”更改為“提示”。 (文本可能已更改;我使用的是舊版Eclipse。)

暫無
暫無

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

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