Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中如何从超类方法中获取子类值?_Java_Class_Inheritance - Fatal编程技术网

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

在Java中如何从超类方法中获取子类值?,java,class,inheritance,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(); 瓦拉100岁 瓦尔布又是100岁

我有两门课:

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?

您可以覆盖B类中的getMax:

  @Override
  public int getMax()
  {
     return max;
  }
不过,一般来说,在超类和子类中使用相同名称的变量是个坏主意

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

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

您可以在类B中重写getMax:

  @Override
  public int getMax()
  {
     return max;
  }
不过,一般来说,在超类和子类中使用相同名称的变量是个坏主意

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

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

覆盖
B
中的
getMax
方法:

class B extends A
{
    public int max = 200;

    public int getMax()
    {
       return max;
    }
}

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

覆盖
B
中的
getMax
方法:

class B extends A
{
    public int max = 200;

    public int getMax()
    {
       return max;
    }
}

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

您必须将方法
getMax()
添加到类
B
。该实现可能与类A中的实现相同

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

当您不覆盖方法时,来自
B
的方法调用父方法
getMax()
。而父metod
getMax()
返回150

您必须将方法
getMax()
添加到类
B
。该实现可能与类A中的实现相同

@Overwrite
public int getMax()
{
   return max;
}
当您不覆盖方法时,来自
B
的方法调用父方法
getMax()
。父metod
getMax()
返回150

Try方法重写

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

解决方案是什么? 加

到B类。请尝试方法重写

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

解决方案是什么? 加


对于类B.

简单的回答是,您不能像正在尝试的那样重写子类中的成员。您应该做的是让B直接更改max的值。大概是这样的:

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

简单的回答是,您不能像正在尝试的那样覆盖子类中的成员。您应该做的是让B直接更改max的值。大概是这样的:

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

实现方法覆盖概念

 @Override
  public int getMax()
  {
     return max;
  }
覆盖在运行时发生

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

希望这能起作用。

实现方法覆盖概念

 @Override
  public int getMax()
  {
     return max;
  }
覆盖在运行时发生

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

希望这能起作用。

Java不支持重写类中的任何变量

你可以有两种方法

  • 通过构造函数传递变量。我建议这样做,因为如果该方法执行相同的操作。通过覆盖它并再次这样做是一种糟糕的做法

    A类{
    公共int最大值=100;
    公共A(整数最大值)
    { 
    这个.max=maxVal;
    } 
    公共int getMax(){
    返回最大值;
    } 
    }
    B clsB=新的B();
    A里昂证券=新A(clsB.max)

  • 覆盖该方法

    @覆盖
    公共int getMax(){
    最大值=200;
    //做好这项工作。
    }


  • Java不支持重写类中的任何变量

    你可以有两种方法

  • 通过构造函数传递变量。我建议这样做,因为如果该方法执行相同的操作。通过覆盖它并再次这样做是一种糟糕的做法

    A类{
    公共int最大值=100;
    公共A(整数最大值)
    { 
    这个.max=maxVal;
    } 
    公共int getMax(){
    返回最大值;
    } 
    }
    B clsB=新的B();
    A里昂证券=新A(clsB.max)

  • 覆盖该方法

    @覆盖
    公共int getMax(){
    最大值=200;
    //做好这项工作。
    }


  • 您甚至没有重写classB中的getMax()方法,为什么希望得到200?它将执行原始方法,因为在classB中没有其他方法声明重写它。看这里也应该有帮助您甚至没有重写classB中的方法getMax(),为什么您希望得到200?它将执行原始方法,因为在classB中没有其他人声明重写它