首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在Java的继承类中对字段和方法的访问不同?

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

Stack Overflow用户
提问于 2009-12-23 01:02:54
回答 1查看 79关注 0票数 2
代码语言:javascript
复制
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"
    }
}

为什么对文件(数据成员)和方法的访问不同?你能从语言设计和实现细节两个方面给我解释一下吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-23 01:13:24

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1947730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档