2013-03-26 293 views
-6

我想幫助他的問題。我無法找到關於此主題的任何內容。 (也許我在尋找錯誤的東西)覆蓋方法

定義C命名爲B的子類,它重寫方法m1(),以便它返回m和n之間的差異。

public class C 
{ 
    private int m; 
    private int n; 

    public C(int mIn, int nIn) 
    { 
     m = mIn; 
     n = nIn; 
    } 
    public int m1() 
    { 
     return m+n; 
    } 
} 
+0

你試過了什麼代碼? – rgettman 2013-03-26 23:33:38

+0

谷歌搜索'java override'的第三個搜索結果 - > http://docs.oracle.com/javase/tutorial/java/IandI/override.html – 2013-03-26 23:33:42

+0

你面臨的問題是什麼?你不知道該怎麼做? – Brandon 2013-03-26 23:33:51

回答

3

首先,mn必須protected,不privateprotected是默認值)。然後就這樣做:

public class B extends C { 
    public int m1() { return m - n; } 
} 
+0

它通常不願意直接解決(明顯)作業問題... – 2013-03-26 23:41:48

+0

我不能改變私人公共或受保護。我不允許改變C級 – 2013-03-26 23:42:13

+0

@Oli Charlesworth:你說得對,這不應該是一個家庭作業論壇。但另一方面,直接解決方案比僅僅是一些評論更好(理解),這個問題不夠好。 – GameDroids 2013-03-26 23:46:18

0

你說,你不能改變C類,並自mnprivateC沒有任何getter和setter,你居然不能請在您的子類B中使用mn。你可以做的是用它自己的mn初始化你的B類。 類似的東西:

public class B extends C{ 
    private int bm; 
    private int bn; 

    public B(int mIn, int nIn){ 
     super(mIn,nIn); 
     this.bm=mIn; 
     this.bn=nIn; 
    } 

    @Override 
    public int m1(){ 
     // and then you can use the B's n and m 
     return this.bm - this.bn; 
    } 
} 

那麼你可以做這樣的事情:

C myClass = new B(1, 2); 
int difference = B.m1(); 

,如果C類,其中任何不同,這可能無法正常工作。如果您不允許更改C,那麼在正常情況下,您甚至不會知道C看起來像什麼,尤其不是它具有變量mn,或者如果它們在另一個方法C的某個地方更改。