我在Java中有两个类:Fist
类正在扩展Person
类。我在eyecolor
中有一个变量Person
,它是私有的,我有一个公共的setter和getter。
现在,如果我在Fist类中扩展它,那么我可以设置变量,我也可以得到它。
我的问题是如果eyecolor
是类Person
的私有成员,为什么我没有收到使用私有成员的错误?为什么这段代码有效? eyecolor
数据成员是否已继承?
人类
package lets_start;
public class Person {
private String eyecolor;
public String getEyecolor() {
return eyecolor;
}
public void setEyecolor(String eyecolor) {
this.eyecolor = eyecolor;
}
}
拳头课程
package lets_start;
public class Fist extends Person {
public static void main(String[] args) {
Fist f = new Fist();
f.setEyecolor("Brown");
System.out.println(f.getEyecolor());
}
}
输出:
棕色
答案 0 :(得分:1)
要从子类访问/编辑它,请创建字段protected
/ package-private
或使用您在Person
中定义的getter / setter。
请参阅https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
为什么我能够从其子类访问它而不会出现使用私有成员的错误?为什么这段代码有效?眼睛颜色数据成员是否继承了?
因为您通过从public
继承的Person
getter / setter访问它。为了更清楚,eyecolor
字段不是继承的,getter / setter是。
如果不清楚,请随时编辑您的问题或评论。
答案 1 :(得分:0)
您正在访问私人会员,而您正在访问公共方法。
访问私有成员看起来像这样,并会产生编译时错误:
package lets_start;
public class Fist extends Person {
public static void main(String[] args) {
Fist f = new Fist();
f.eyecolor = "Brown";
System.out.println(f.eyecolor);
}
}