2017-02-23 217 views
0

以下是我的代碼。我沒有得到什麼錯誤。任何人都可以引導。覆蓋構造函數類

class State { 
    static String country; 
    static String capital; 

    State() // Constructor 
    { 
     country = "America's"; 
     capital = "Washington D.C"; 

    } 

    static void display() { 
     System.out.println(capital + " " + "is" + " " + country + " " + "capital."); 

    } 
} 

class Place extends State // Method Overriding 
{ 
    static void display() { 
     System.out.println("Capital is Washington D.C."); 
    } 

    public static void main(String[] args) { 

     State st = new State(); 
     Place pl = new Place(); 
     st.display(); 
     pl.display(); 
     st = pl; 

    } 
} 

在運行它顯示爲「錯誤:無法找到或加載主類國家$地方」

As the output needs: "Capital is Washington D.C." instead of (capital + " " + "is" + " " + country + " " +"capital.")

+0

什麼目的呢?? 'st = pl;' –

+0

它對我很好用。 –

+0

顯示「Capital is Washington D.C.」而不是(大寫+「」+「是」+「」+ country +「」+「capital。」) – Arvind

回答

-1

Place類需要被定義爲public

編輯:該文件還必須命名爲Place.java

+1

是什麼讓你這麼想?你能詳細解釋一下嗎? – Pshemo

+0

@TomK你認爲主要方法必須在公開課上? – Pshemo

+0

'main'方法不需要在公共類中。同樣,如果最高級別的課程不公開,它不需要使用同名的文件,因此答案的兩個方面都是錯誤的。我不知道誰在沒有測試的情況下提出了答案。 – Pshemo

0
class State 
{ 
    static String country; 
    static String capital; 


    State()  //Constructor 
    { 
     country = "America's"; 
     capital = "Washington D.C"; 

    } 

    static void display() 
    { 
     System.out.println(capital + " " + "is" + " " + country + " " +"capital."); 

    } 
} 

主類

class Place extends State // Inheritance 
    static void display() 
    { 
     System.out.println("Capital is Washington D.C."); 
    } 
    public static void main(String[] args) 
    { 

     State st = new State(); 
     st.display(); // to print sub class method 
     display(); // to print same class method 
     //st = pl; No idea of this point .. 

    } 
} 
+0

「* st.display(); //打印子類方法*」您可能意思是sup(super)類,因爲「Place extends State」和「st」是「State」類型。換句話說,它與調用'State.display()'相同,因爲'display'是靜態方法。 – Pshemo

+0

@Arvind有沒有更新? –

0

Overriding取決於有一個類的實例。 polymorphism的要點是您可以繼承一個類,並且實現這些subclasses的對象將具有與superclass(並在subclasses中重寫)中定義的相同方法不同的行爲。靜態方法不與任何類的任何實例關聯,因此這個概念不適用。

推動Java設計的兩個因素影響了這一點。其中一個問題是性能問題:Smalltalk對它的速度太慢了(垃圾回收和多態調用是其中的一部分),Java的創建者決心避免這種情況。另一個決定是Java的目標受衆是C++開發人員。使靜態方法按照他們的方式工作的好處是程序員熟悉C++,並且速度也非常快,因爲不需要等到運行時才能確定要調用哪種方法。

I give you a small example : // and it is not overriding method.May be this is you actually expect

public class HelloWorld { 

    public static void main(String args[]) { 

     Company st = new Company(); 
     eBay pl = new eBay(); 
     st=pl; 
     //st.address(); 
     pl.address(); 

    } 
} 

class Company { 
    static String country; 
    static String capital; 

    Company() // Constructor 
    { 
     country = "America's"; 
     capital = "Washington D.C"; 

    } 

    static void address() { 
     System.out.println(capital + " " + "is" + " " + country + " " + "capital."); 

    } 

} 

class eBay extends Company { 

    public static void address() { 
     System.out.println("Capital is Washington D.C"); 
    } 
} 
+0

並將該文件保存爲HelloWorld.java –