【问题标题】:Need explanation on: Private Access modifier in java需要解释:Java中的私有访问修饰符
【发布时间】:2018-02-13 21:45:41
【问题描述】:

我在 Java 中有两个类:Fist 类正在扩展 Person 类。我在Person 中有一个变量eyecolor,它是私有的,我有一个公共的setter 和getter。

现在,如果我在 Fist 类中扩展它,那么我可以设置变量并且也可以获取它。

我的问题是,如果 eyecolorPerson 类的私有成员,为什么我在使用私有成员时没有收到错误消息?为什么这段代码有效? 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());
    }
}

输出:

棕色

【问题讨论】:

  • 通过公共 getter getEyecolor.
  • 我不确定,你的问题是什么。
  • Fist 继承了公共的 getter 和 setter 方法。 仅在Person 类中访问私有字段。如果您在类Fist 中创建一个方法,其中您尝试直接访问字段eyecolor,那么它将无法编译。
  • 现在请查看问题
  • “为什么我没有收到使用私人会员的错误?”因为您没有直接访问它,所以您使用的是公共吸气剂。 “眼睛颜色数据成员是继承的吗?”不,它没有,它继承了公共 getter/setter

标签: java oop access-modifiers


【解决方案1】:

要从子类访问/编辑它,请创建字段protected/package-private 或使用您在Person 中定义的getter/setter。

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html


为什么我可以从它的子类访问它,而不会出现使用私有成员的错误?为什么这段代码有效? eyecolor 数据成员 get 是继承的吗?

因为您通过继承自Personpublic 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");
    猜你喜欢
    • 2015-11-26
    • 2021-08-25
    • 2016-08-21
    • 2017-12-22
    • 2017-05-16
    • 2016-10-20
    • 2014-08-27
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多