JAVA从其他包调用继承类的成员(其他类类型)

时间:2014-04-09 04:57:53

标签: java

我是JAVA的新手,我试图了解继承是如何工作的。 我有3个班级:

package dziedziczenie2;


public class Kobieta {

    protected Oczy Eyes = new Oczy();

    public static void main(String[] args) {

        Kobieta x = new Kobieta();
        System.out.println(x.Eyes); // blue
        x.Eyes.kolor = "red";
        System.out.println(x.Eyes); // red
    }

}

class Oczy{
    public String kolor = "blue";
    public String toString(){
        return kolor;
    }
}

其他包裹:

package dziedziczenie;

import dziedziczenie2.Kobieta;

public class Ania extends Kobieta{

    public static void main(String[] args) {
        Ania x = new Ania();
        System.out.println(x.Eyes); // blue
        x.Eyes.kolor = "red"; // type Oczy not visable
    }

}

我的问题是,为什么我不能在Ania课中改变Eye.kolor,只需输入x.Eyes.kolor。

我知道Oczy不公开,但我可以某种方式使用它的toString方法。 编辑:为什么我可以使用其toSting方法,但我无法使用其成员?

每次我想与其他软件包中的Oczy成员进行交互时,我是否必须在Kobieta中创建一个与Oczy成员交互的方法?

提前致谢

3 个答案:

答案 0 :(得分:1)

Eyes属于Oczy类型,具有默认可见性,因为它没有访问修饰符。您只能在其声明的同一个包中访问其成员,即使这些是公开的。

  

我是否必须在Kobieta中创建一个与Oczy交互的方法   每当我想与Oczy会员进行互动时,我都会成为会员   其他包裹?

您可以这样做,或者您可以将Oczy移动到其自己的编译单元(.java文件)并将其设为public

答案 1 :(得分:1)

Oczy类具有访问修饰符"默认"这只能在包装中找到" dziedziczenie2" n不在包装中#d; dziedziczenie"。

  

1)选项:

您可以创建一个文件Oczy.java,声明公共类Oczy并完成。

  

2)选项:

你可以像这样在类Kobieta中声明公共静态类Oczy。

public class Kobieta {
  // ur code
  public static class Oczy {
    // ur code
  }
}

答案 2 :(得分:0)

如果我理解正确,您希望将Eyes继承到Ania类 因为继承属性不像方法那样继承。 EyesKobieta类的属性,因此当Ania扩展Kobieta时,它不会继承它。