在java中,基类中的public属性在派生类中是不可见的吗?

时间:2012-10-17 09:19:21

标签: java maven

class base {
    public <type> a;

}

class derived extends base {
     ...
     public void dMethod() {
         a.method();
     }
     ...
}

snippt来自我在项目中使用的包A. derived会看到基座中的a,因此可以使用它。

但是当我运行mvn clean install来打包我的项目时,它会抱怨它无法找到 派生类中的符号a(我已经依赖添加了包A)。

它出了什么问题?

修改

我在我的项目中使用了这样的代码:

class my {
    derived d = new derived();
    d.a.method();
     ...
}

它在日食中运行良好,但是当我打包它时,它会抱怨。 method()确实有public修饰符。

2 个答案:

答案 0 :(得分:2)

公共属性或方法随处可见

由于a是公共的,您可以从派生类(或代码中的任何其他类)访问它。

但是,即使a是公开的,也不会使其方法公开。如果您在调用a.method()时遇到问题,那是因为method在您的上下文中不可见(它可能是私有的,受保护的或具有包可见性)。

解决方案是检查方法a.method(),如果可以,可以将其更改为公开。或者也许对象a的意思不同。

答案 1 :(得分:0)

method()应​​该有一个public(或者在这种情况下受保护也可以)标识符... 在'a'上公开标识符并不公开其所有字段和方法。