首页 > 解决方案 > java构造函数是如何工作的?

问题描述

我有以下程序:

class A{
    int b = 50;
}

class B extends A{
    int b = 20;
}

public class Maini{
    public static void main(String[] args){
        A a = new B();
        System.out.println(a.b);
    }
}

结果是 50,我想知道为什么?在我运行代码之前,我很确定结果应该是 20。

标签: javainheritancesuperclass

解决方案


这与构造函数的工作方式无关。

请注意,bclassB中的成员变量不会覆盖 class 中的成员b变量A。只有非静态的、非私有的方法可以被覆盖。成员变量不能被覆盖。

如果你有一个 class 的实例B,那么它实际上有两个名为 的成员变量b:一个在对象的超类 ( A) 部分,一个在子类部分 ( B)。

您看到值 50(即对象部分中的值)b的原因是因为方法中A的变量是 类型。如果将其更改为,您将获得 20:amainAB

B a = new B();  // instead of A a = ...;

推荐阅读