假设我有一个班级名称员工
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()?
如果班级设计模式有任何问题,请告诉我。我想让它尽可能完美。谢谢你的帮助。
答案 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方法,否则在某种意义上,您将无法访问基本变量。