父类中的私有字段 - java

时间:2014-03-22 07:27:22

标签: java inheritance private

class Parent{
    private int a = 10;
    public int getA() {
        return a;
    }
} 

class Child extends Parent{ 
    public int b = 20;
    public void getSuperA() {
        System.out.print(getA()); // getA() instead of a
    }
}

当我们创建子类对象时,只会创建一个对象。该对象中的成员是什么?父母的私人领域会发生什么?

4 个答案:

答案 0 :(得分:2)

实例化子类的对象时。

  • 无论访问修饰符(私有,受保护还是公共),都会初始化父级和子级的所有字段
  • 调用父类的构造函数。
  • 调用子类的构造函数。

因此字段将存在(并且它们将存储一个值),但如果它们是私有的,您将无法访问它们。

返回私有字段的公共方法将授予您该访问权限。简而言之,它会起作用。

希望这有帮助。


修改(以回应评论):

该机制内置于安全语言中。访问修饰符提供该机制所需的信息。

  • 私人字段只能从 类中访问。
  • 目前,但可见来自外部。
  • 你可以通过它对该类的某些公共方法(使用它的那些)的行为的影响来感知它的存在。由于这些方法是同一类的成员,因此可以访问私有字段。

优点:

  • 您可以从外部隐藏实施细节。
  • 您可以通过方法限制字段的不当使用。

实施例

private int salary;

public void setSalary(int newSalary) {
    if (newSalary < MAX_SALARY) {
        this.salary = newSalary;
    } else {
        this.salary = MAX_SALARY;
    }
}

答案 1 :(得分:1)

子对象将为父级私有字段保存一个值,但因为它在Parent中是私有的,任何人(包括子对象本身)对的唯一方式访问该值是通过从父类继承的方法。

答案 2 :(得分:0)

智利对象的字段已创建。 初始化第一个字段,然后调用构造函数。 在您的案例中,字段a将初始化为值10。

答案 3 :(得分:0)

似乎你知道你做了什么

 Child ch = new Child() 

然后

ch.a;

显然不起作用,因为它是私人的 但是当一个对象从父类扩展时,它继承了所有的public和private属性,所以你必须在Parent类中定义一个函数,比如

public int getA(){
   return a;
}

稍后在ch中你可以访问如下:

ch.getA();