有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有两门课:

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

瓦拉100岁 瓦尔布又100岁了

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


共 (3) 个答案

  1. # 1 楼答案

    您可以覆盖B类中的getMax:

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

    不过,一般来说,在超类和子类中使用同名变量是个坏主意

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

    A clsB = new B();
    valB = clsB.getMax();
    
  2. # 2 楼答案

    尝试方法重写

    在Java中,将调用“最近的方法”。因为clsB扩展了A,但没有自己的getMax()定义,所以将调用A的getMax()版本。然而,因为clsB也共享A的变量,所以getMax(从类A调用)将返回类A的编号

    解决方案是什么? 加上

    public int getMax()
    {
         return max;
    }
    

    去B班

  3. # 3 楼答案

    重写B中的getMax方法:

    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字段值