需要解释:Java中的私有访问修饰符
Posted
技术标签:
【中文标题】需要解释:Java中的私有访问修饰符【英文标题】:Need explanation on: Private Access modifier in java 【发布时间】:2018-02-13 21:45:41 【问题描述】:我在 Java 中有两个类:Fist
类正在扩展 Person
类。我在Person
中有一个变量eyecolor
,它是私有的,我有一个公共的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());
输出:
棕色
【问题讨论】:
通过公共 gettergetEyecolor
.
我不确定,你的问题是什么。
Fist
继承了公共的 getter 和 setter 方法。 仅在Person
类中访问私有字段。如果您在类Fist
中创建一个方法,其中您尝试直接访问字段eyecolor
,那么它将无法编译。
现在请查看问题
“为什么我没有收到使用私人会员的错误?”因为您没有直接访问它,所以您使用的是公共吸气剂。 “眼睛颜色数据成员是继承的吗?”不,它没有,它继承了公共 getter/setter
【参考方案1】:
要从子类访问/编辑它,请创建字段protected
/package-private
或使用您在Person
中定义的getter/setter。
见https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
为什么我可以从它的子类访问它,而不会出现使用私有成员的错误?为什么这段代码有效? eyecolor 数据成员 get 是继承的吗?
因为您通过继承自Person
的public
getter/setter 访问它。为了更清楚,eyecolor
字段不是继承的,getter/setter 是。
如果不清楚,请随时编辑您的问题或评论。
【讨论】:
【参考方案2】:您访问的不是私有成员,而是访问公共方法。
访问私有成员如下所示,会产生编译时错误:
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);
【讨论】:
所以当我这样做时值被存储在哪里:f.setEyecolor("Brown");以上是关于需要解释:Java中的私有访问修饰符的主要内容,如果未能解决你的问题,请参考以下文章