Java 覆盖方法

Java 覆盖方法,java,methods,overriding,Java,Methods,Overriding,我想帮助解决他的问题。我找不到关于这个话题的任何东西。(也许我找错东西了) 定义一个名为B的C的子类,它重写方法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

我想帮助解决他的问题。我找不到关于这个话题的任何东西。(也许我找错东西了)

定义一个名为B的C的子类,它重写方法
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;
    }
}

首先,
m
n
需要
保护
,而不是
私有
保护
是默认设置)。然后做一些类似的事情:

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

您说过,您不能更改
C
类,而且由于
m
n
private
并且
C
没有任何getter和setter,您实际上不能在子类
B
中使用
m
n
。您可以做的是用自己的
m
n
初始化
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
到底是什么样子,尤其是它没有变量
m
n
,或者它们是否在
C
的另一种方法中发生了更改

您尝试过哪些代码?在google上搜索“java override”的第三个结果->您面临的问题是什么?你不知道怎么做吗?欢迎你这么做。请阅读和,以获取编写好的SO问题的提示。@RobertAnthonySvec:“非常困惑”不是一个非常有用的描述;)具体来说,你对什么感到困惑?通常不赞成直接解决(明显的)家庭作业问题……我不能把私人问题变成公共问题或受保护的问题。我不允许更改Cclass@Oli查尔斯沃思:你说得对,这不是一个家庭作业论坛。但另一方面,一个直接的解决方案(理解)比一些评论要好得多,因为这个问题还不够好。谢谢@GameDroids,我有点明白,但我不能改变C类