我是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
    }

}


我的问题是,为什么我不能仅通过键入x.Eyes.kolor来更改Ania类中的Eye.kolor。

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

每当我想与其他软件包中的Oczy成员进行交互时,我是否必须在Kobieta中制定一种与Oczy成员进行交互的方法?

提前致谢

最佳答案

Oczy类具有访问修饰符“默认”,只能在“ dziedziczenie2”包中访问,而不能在“ dziedziczenie”包中访问。


  1)选项:


您可以简单地通过声明公共类Oczy来创建文件Oczy.java,然后完成。


  2)选项:


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

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

09-30 15:45