如何访问继承中的私有字段

时间:2014-12-20 18:59:22

标签: java design-patterns class-design

假设我有一个班级名称员工

class Employee
{
   int empID;
   String name;
   public Employee(int empID,String name)
   {
     this.empID = empID;
     this.name = name;
   }
   // getters and setters
}

现在我根据位置

创建子类
class Manager extends Employee
{
  private String salary;
  private int deptID;
  public Manager(String salary, int deptID,int id, String name)
  {
    super(id,name);
    this.salary = salary;
    this.deptID = deptID;
  }
  // getters and setters 
 }

如果我想从Manager类访问empID和Manager的名称,我该怎么做呢,因为这些字段是私有的?我想在Manager类的getter函数中,我会做super.getName()和super.getID()?

如果班级设计模式有任何问题,请告诉我。我想让它尽可能完美。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

如果使用受保护的变量,任何继承它们的类都可以访问它们。

class Employee
{
   protected int empID;
   protected String name;
   public Employee(int empID,String name)
   {
     this.empID = empID;
     this.name = name;
   }
}

class Manager extends Employee
{
  private String salary;
  private int deptID;
  public Manager(String salary, int deptID,int id, String name)
  {
    super(id,name);
    this.salary = salary;
    this.deptID = deptID;

    // Can access protected variables
    empID = 0;
  }
 }

否则,您可以将getters和setter与受保护或公共访问者一起使用,并将变量标记为私有。

目前您的变量已标记为默认值(无指定访问者),您可以在此处查看不同的访问者允许您执行的操作:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

答案 1 :(得分:1)

您有2个选项

private更改为protected,以便允许子类直接访问父字段,但阻止其他类具有直接访问权限。

 private String salary;
  private int deptID;

protected String salary;
  protected int deptID;

或者您可以在父类中创建getter / setter(具有适当的访问修饰符)并从子类E.g调用它们。 super.getFoo()

答案 2 :(得分:1)

如您所知,基类变量默认为 package private ,在派生类中具有私有访问权限。从这个意义上讲,getter方法可以用于此原因,并且可以在派生类上使用。请注意,getter是常规方法并执行后期绑定,因此请注意不要在派生类上应用相同的getter方法,否则在某种意义上,您将无法访问基本变量。