需要解释:java中的Private Access修饰符

时间:2017-09-05 14:37:31

标签: java oop access-modifiers

我在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());
    }
}

输出:

  

棕色

2 个答案:

答案 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);
    }
}