2013-03-26 368 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的某个地方更改。