Java中的变量继承

Col*_*ing 4 java eclipse oop inheritance

我有一个超级类和一堆子类.我想有一个在每一个子类的同名一个领域,但我不希望它在超类中定义,或者至少我不希望使用该值.这就是我现在所拥有的

public abstract class Big {

    public String tellMe = "BIG";

    public Big() {}

    public void theMethod() {
        System.out.println ("Big was here: " + tellMe() + ", " + tellMe);
    }
    public String tellMe() {
        return tellMe;
    }
}

public class Little extends Big{

    public String tellMe = "little";
    public Little(){}

    public String tellMe() {
        return "told you";
    }
    public static void main(String [] args) {
        Little l = new Little();
        l.theMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行Little时,这就是输出

大在这里:告诉你,大

我不确定为什么'告诉你'打印出来,而tellMe指的是"BIG".两者都是如此?

我的问题是我希望方法tellMe()在Big中,并让变量tellMe(它将实际返回)在所有子类中定义.我可以通过重写每个子类中的tellMe()方法来编写代码的唯一方法.但这不是打败继承的整个目的吗?请帮忙

编辑:我不在我的子类中使用构造函数.我想要的只是一个可以在所有子类中设置的字段和一个使用这些值的超级方法.我不明白为什么这是不可能的,因为每个子类都必须实现它,所以它才有意义...如果这根本不可能,请告诉我

Red*_*sel 6

与方法不同,字段不是虚拟的.因此,声明与层次结构中另一个类中的字段具有相同名称的字段是个坏主意.引用的字段theMethod总是来自Big(即,当您声明具有相同名称的字段时,它只是在替换类的范围内隐藏旧字段,但不替换它).

一种解决方案是覆盖从当前类获取字段的方法:

theMethod更换tellMe与现场getTellMe()并为所有类覆盖getTellMe(),以返回正确的值(或隐藏超类的域的域).