为什么访问字段和方法在Java中的继承类中有所不同?

时间:2009-12-22 17:02:54

标签: java inheritance

class BaseClass {
    protected int filed = 1;
    public void method() {
        System.out.println("+ BaseClass method");
    }
}

class DerivedClass extends BaseClass {
    private int filed = 2;
    public void method() { 
        System.out.println("+ DerivedClass method");
    }

    public void accessFiled() {
        System.out.println("DerivedClass: default filed = " + filed); // output 1
        System.out.println("DerivedClass: upcasting filed = " + ((BaseClass)this).filed); // output 2
    }

    public void accessMethod() {
        System.out.println("DerivedClass: default method");
        method(); // output "+ DerivedClass method"
        System.out.println("DerivedClass: upcasting method");
        ((BaseClass)this).method(); // expecting "+ BaseClass method" but "+ DerivedClass method"
    }
}

为什么访问字段(数据成员)和方法有所不同?您能否就语言设计和实现细节方面向我解释一下?

感谢。

1 个答案:

答案 0 :(得分:3)

这是因为您只能使用override个方法,而不能使用字段。在DerivedClass隐藏filed中声明的变量BaseClassDerivedClass的实例实际上有两个名为filed的字段,您可以使用适当的强制转换访问这两个字段。能够覆盖字段没有多大意义......只有行为。