哦,我不明白为什么我的java继承不起作用
在家庭作业方面,我将学习以下三门课
Class | Extends | Variables
--------------------------------------------------------
Person | None | firstName, lastName, streetAddress, zipCode, phone
CollegeEmployee | Person | ssn, salary,deptName
Faculty | CollegeEmployee | tenure(boolean)
我很难让教员构造函数正确使用超类中的数据
import java.util.*;
import javax.swing.*;
public class Faculty extends CollegeEmployee
{
protected String booleanFlag;
protected boolean tenured;
public Faculty(String firstName, String lastName, String streetAddress,
String zipCode, String phoneNumber, String ssn,
String department, double salary)
{
super(firstName,lastName,streetAddress,zipCode,phoneNumber,
department,ssn,salary);
String booleanFlag = JOptionPane.showInputDialog(null, "Tenured (Y/N)?");
if(booleanFlag.equals("Y"))
tenured = true;
else
tenured = false;
}
public void setTenure(boolean tenured)
{ this.tenured = tenured; }
public boolean getTenured()
{ return tenured; }
public void display()
{
super.display();
JOptionPane.showMessageDialog(null, "Tenured: " + tenured);
}
}
下面显示了CollegeEmployee
类,其中Faculty
从该类中派生
import java.util.*;
import javax.swing.*;
public class CollegeEmployee extends Person
{
protected String ssn;
protected String sal;
protected double annSalary;
protected String department;
public CollegeEmployee(String firstName, String lastName,
String streetAddress, String zipCode,
String phoneNumber)
{
super(firstName,lastName,streetAddress,zipCode,phoneNumber);
ssn = JOptionPane.showInputDialog(null, "Enter SSN ");
department = JOptionPane.showInputDialog(null, "Enter department: ");
sal = JOptionPane.showInputDialog(null, "Enter salary: ");
annSalary = Double.parseDouble(sal);
}
public void setFirstName(String firstName)
{ this.firstName = firstName; }
public String getFirstName()
{ return firstName; }
... ETC ... REMAINING GET/SET METHODS ELIMINATED FOR BREVITY.
我得到的错误表明参数之间不匹配Faculty
调用八个参数,但CollegeEmployee
只有五个参数。然而,我认为通过扩展CollegeEmployee
扩展Person
,在调用这个类时,我可以访问所有八个字段。正如已经指出的那样,情况并非如此。我只有来自Person
的五个字段。因此,我明显的下一个问题是如何将ssn, department and salary
从CollegeEmployee
到Faculty
?这就是我丢失的那一块。我已经仔细阅读了Java教程并进行了几个小时的实验,但仍然无法获得需要进行更正的内容。我是否需要通过CollegeEmployee
调用People
变量,然后在Faculty
中实例化CollegeEmployee
变量?我真的很困惑该做什么,迫切需要一些指导
谢谢,在我阅读了教程中的super()关键字部分后,过几天我就会回来
# 1 楼答案
在学院里。您拥有的java: 超级(名字、姓氏、街道地址、邮政编码、电话号码、部门、ssn、工资)
这是在物理上调用CollegeEmployee的构造函数,它只有五个参数。这是一个编译错误
类可能有未在构造函数中设置的变量。您可以使用空构造函数并在另一个方法中设置变量
由于存在继承结构,因此只能通过super()设置父变量
# 2 楼答案
构造函数中的
super()
调用调用父类构造函数。在本例中,父类CollegeEmployee
的构造函数接受五个参数,但传递八个参数,这是不正确的具体参见Keyword super Tutorial,章节子类构造函数