【问题标题】:Overriding Methods [closed]覆盖方法[关闭]
【发布时间】:2013-03-16 23:20:47
【问题描述】:

我想帮助解决他的问题。我在这个话题上找不到任何东西。 (也许我在寻找错误的东西)

定义一个名为 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;
    }
}

【问题讨论】:

  • 你试过什么代码?
  • 谷歌上“java override”的第三个搜索结果 -> docs.oracle.com/javase/tutorial/java/IandI/override.html
  • 您面临的问题是什么?你不知道怎么做?
  • 欢迎来到 SO。请阅读FAQHow to Ask,了解如何编写好的 SO 问题。
  • @RobertAnthonySvec:“非常困惑”不是一个很有帮助的描述;)具体来说,您对什么感到困惑?

标签: java methods overriding


【解决方案1】:

您说,您不能更改 C 类,并且由于 mnprivateC 没有任何 getter 和 setter,您实际上 可以t 在您的子类B 中使用mn。你可以做的是用它自己的mn初始化你的Bclass。 类似的东西:

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();

但是,如果Cclass 有任何不同,这可能不起作用。当您不允许更改 C 时,在正常情况下,您甚至不知道 C 的确切外观,尤其是它具有变量 mn 或者它们是否以另一种方法更改的C

【讨论】:

    【解决方案2】:

    首先,mn 必须是 protected,而不是 privateprotected 是默认值)。然后只需执行以下操作:

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

    【讨论】:

    • 通常不赞成直接解决(明显的)家庭作业问题...
    • 我无法将私有更改为公共或受保护。我不允许更改 C 类
    • @Oli Charlesworth:你说得对,这不应该是一个家庭作业论坛。但另一方面,直接解决方案比一些 cmets 更好(理解),问题还不够好。
    • 感谢@GameDroids,我有点明白了,但我无法更改 C 类
    猜你喜欢
    • 2014-05-23
    • 1970-01-01
    • 2022-01-23
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2011-11-03
    • 2013-09-06
    相关资源
    最近更新 更多