java - 为什么我不继承父类(super class)变量?

标签 java oop inheritance superclass

我正在输出

SubClass subClass = new SubClass(4);
System.out.println(subClass.getVal());

这两个类:

public class SuperClass {
    public int x = 99;

    public int superClassMethod() {
        return -1;
    }
}


public class SubClass extends SuperClass {
    public int x;

    public SubClass(int value) {
        x = value;
    }

    public int getVal() {
        return x;
    }
}

这会按预期输出 4。但是假设我在 SubClass 构造函数中注释掉了行 x = value 。为什么它输出 0(我假设未初始化变量的默认值)而不是 99,继承自父类(super class)?

如果我将 return x 更改为 return superClassMethod(); 它似乎正确地从父类(super class)中提取了 -1。那么为什么是方法而不是变量呢?

最佳答案

当变量在不同范围内具有冲突的名称时,它总是使用最近范围内的变量,即使它尚未设置为任何内容。

为了区分其他作用域中的变量,在变量前面加上thissuper:

public class SuperClass {
    protected int x;
}
public class SubClass extends SuperClass {
    private int x;
    public SubClass(int x) {
        x = 2; // sets the parameter variable
        this.x = 2; // sets the instance variable
        super.x = 2; // sets the super class' instance variable
    }
}

关于java - 为什么我不继承父类(super class)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36520636/

相关文章:

java - 访问/gcm-demo/sendAll。原因: HTTP Status Code: 401

php - 在这个例子中如何正确返回类值? PHP

javascript - 单击时如何选择(此)图像?

java - 在旧代码中使用 SOLID 原则实现新功能

c# - 为什么我的接口(interface)的 BaseType 为空?

java - 将 SQLite 数据导出到 CSV 仅输出 CSV 文件中数据库的最后一个条目

java - 将套接字设置为 null 而不是在 Java 中使用 ".close()"是错误的

java - 如何使用 apache commons BooleanUtils.and 方法?

c++ - 重新定义派生类继承的内部函数对基类产生影响

java - Java中如何使用父类抽象复制构造函数复制子类?