如何从Java中的超类方法获取子类值?

时间:2015-01-13 08:45:05

标签: java class inheritance

我有这两个类:

Class A 
{
  public int max = 100;

  public int getMax()
  {
     return max;
  }
}



Class B extends A
{
  public int max = 200;
}

我写下面的代码:

A clsA = new A();
B clsB = new B();


valA = clsA.getMax();
valB = clsB.getMax();

valA是100 valB再次为100

如何编写clsB.getMax();返回200的代码?

7 个答案:

答案 0 :(得分:6)

您可以在B类中覆盖getMax:

  @Override
  public int getMax()
  {
     return max;
  }

虽然一般来说,在超类和子类中使用相同名称的变量是个坏主意。

请注意,更改后,以下内容也将返回200:

A clsB = new B();
valB = clsB.getMax();

答案 1 :(得分:2)

覆盖getMax中的B方法:

class B extends A
{
    public int max = 200;

    public int getMax()
    {
       return max;
    }
}

在getter方法中,return max;相当于return this.max,其中this引用B的当前实例。另一方面,调用return super.max将返回父子类中引用的max字段值。

答案 2 :(得分:2)

简短的回答是你不能像你正在尝试的那样覆盖子类中的成员。你应该做的是让B直接改变max的值。像这样:

class B extends A
{
    public B() 
    {
        max = 200;
    }
}

答案 3 :(得分:0)

您必须将方法getMax()添加到课程B。实施可能与A类相同

@Overwrite
public int getMax()
{
   return max;
}

当你不覆盖B中的方法时,会调用父方法getMax()。并且父元组getMax()返回150

答案 4 :(得分:0)

尝试方法覆盖

在Java中,"最接近的方法"将被召唤。因为clsB扩展了A,但是没有它自己定义的getMax(),所以将调用A&#39的getMax()版本。但是,因为clsB也共享A的变量,所以getMax(从A类调用)将返回A类的数字。

解决方案? 添加

public int getMax()
{
     return max;
}

到B级。

答案 5 :(得分:0)

实施方法覆盖概念

 @Override
  public int getMax()
  {
     return max;
  }

在运行时覆盖

A clsB = new B();
valB = clsB.getMax();

希望这应该有用。

答案 6 :(得分:0)

Java不支持覆盖类中的任何变量。

您可以通过两种方式完成此操作。

  1. 通过构造函数传递变量。我建议这样做,因为,如果方法做同样的动作。通过覆盖并再次执行它是一种不好的做法。

    Class A { public int max = 100; public A(int maxVal) { this.max=maxVal; } public int getMax(){ return max; } } B clsB = new B(); A clsA = new A(clsB.max);

  2. 覆盖方法

    @override public int getMax(){ max=200; //do the job. }