我是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成员交互的方法?
提前致谢
答案 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
类
因为继承属性不像方法那样继承。 Eyes
是Kobieta
类的属性,因此当Ania
扩展Kobieta
时,它不会继承它。