我有员工,经理班 .
employee具有私有String名称,int age,double salary . 他们必须放在一个方法中 . 我把它们放在String细节中
public void details(String name,int age, double salary)
{
this.name=name;
this.age=age;
this.salary=salary;
}
然后他们必须传递给班长,但是要添加一个新属性,即部门 .
class Manager extends Employee{
private string department;
}
多数民众赞成我的问题,我不能与属性部门一起输出属性 .
UPDATE #1
我之前尝试过使用此代码:
public void details(String name, int age, double salary, String dept)
{
super(name, age, salary);
this.dept = dept;
}
但是它给出了一个错误,即对super的调用必须是构造函数中的第一个语句 .
这就是我的经理如何扩展员工类的样子 .
class Manager extends Employee
{
private String department;
public Manager(String name,int age,double salary,String department)
{
super(name,age,salary);
this.department=department;
}
public String getDetails()
{
return super.details;
}
public void details(String name, int age, double salary, String department)
{
super(name, age, salary);
this.department = department;
}
}
UPDATE #2
属性名称,年龄和薪水必须是私有的 . 我已经尝试将其更改为公开并使用 super.details(name age salary)
并且它有效 . 我've tried the same codes but with private attribute but it didn'工作 .
4 回答
您需要包含子类继承的值作为属性 .
私有意味着私有,因为没有其他类可以访问它们 . 您的两个选项是:在父类中创建getter / setter方法或使变量受到保护,以便“Manager”可以看到它们 . 我会说明哪个更好,但是你没有告诉我们你问题的“原因”......
您的错误是您尝试使用关键字
super
从details(String name, int age, double salary, String dept)
调用details(String name, int age, double salary)
. 这些方法有不同的签名 . 因此,您无法在子类方法详细信息中调用super
.方法的签名(构造函数除外)由三个元素组成 . 方法的可见性,名称,返回值和参数 .
在这种情况下,Manager方法
public void details(String name, int age, double salary, String department)
是public,返回void,其名称是详细信息,并且有四个参数,String,int,double和String,但Employee方法public void details(String name, int age, double salary, String department)
在参数中是不同的 . 这个方法只有三个参数,一个是String,int和double .在这种情况下,您可以直接调用详细信息或覆盖该方法(第二个解决方案无法为详细信息分配
department
. 因此,我建议您直接调用) .处理此问题的最佳方法可能是Manager类覆盖details()方法,添加新参数:
经理班