在超类中访问childs实例变量?

时间:2018-03-23 06:13:25

标签: java oop inheritance polymorphism

我有一种方法可以将数据写入superclass(Employee)的文件中。我需要在该方法中编写其他员工的数据,但我不确定如何访问子类中的实例变量以完成此操作。

public class Employee
{
    protected String name;
    protected String employeeNum;
    protected String department;
    protected char type;
}  


public void writeData()
{
    BufferedWriter printer = new BufferedWriter(new FileWriter("fileName"));
    //code here that adds Employee information, and Commission information to file
}  

public class Commission extends Employee 
{
    private int weeksStart;
    private double baseWeeklySalary;
    private double salesWeekly;
    private double totalSales;
    private double commissionRate;
}  

2 个答案:

答案 0 :(得分:1)

Commission信息在超类中无法访问,但您可以覆盖子类中的writeData(),这样您就可以访问EmployeeCommission信息。

@override
public void writeData()
{
    BufferedWriter printer = new BufferedWriter(new FileWriter("fileName"));
    String data="name:"+name+","+"employeeNum:"+employeeNum+
           ","+"......"+","+"weeksStart:"+weeksStart;
    printer.write(data);
}  

答案 1 :(得分:0)

我在理解你的问题时遇到了一些麻烦,但如果我是正确的,你会想知道如何从一个Employee实例外部访问Commission的私人成员。如果这是正确的,请点击这里:

问题在于您使用Polymorphism而没有正确构建佣金子类以允许访问您想要的私有成员。由于成员是私有的,因此您无法从任何其他类访问它们。您需要将get / set方法添加到Commission类以访问这些私有成员。这样可以严格控制它们,同时还可以防止外部调整。

例如,如果您想设置或获得 佣金率,您可以在佣金类中添加方法,例如:

public void setCommissionRate(double newRate){
   //Confirming a non-negative input - set checks appropriately for your use
    if(newRate >= 0)  
        commissionRate = newRate;
}

public double getCommissionRate(){
    return commissionRate;
}

这将为您选择的私人成员提供对其他课程的访问权限。但是,set方法通常比获取私有成员的方法更加稀缺,因为它可以提供对外部类的过多访问,并且通常是继承或添加到构造函数中。

如果从Employee实例访问,则在委托类中需要重写的write方法以允许访问其成员。

希望我回答了你的主要问题,这可以帮助你。