Я использую Eclipse для запуска этой программы кода для тестирования класса Person и его подклассов. В Eclipse он показывает, что есть ошибки - каждый дочерний класс должен быть определен в своем собственном файле.
Я изучаю Java и хотел бы знать, нужно ли это? Или я могу заставить его работать с родительскими и дочерними классами в одном файле? Если я что-то упустил, пожалуйста, укажите мне правильное направление. Спасибо!
Вот мой код: [Я поместил все это в один файл в Eclipse]
import java.util.*;
//Test program to test Person class and its subclasses
public class Test {
public static void main(String[] args) {
Person person = new Person("person");
Student student = new Student ("student");
Employee employee = new Employee("employee");
Faculty faculty = new Faculty("faculty");
Staff staff = new Staff("staff");
//invoke toString() methods
System.out.println(person.toString());
System.out.println(student.toString());
System.out.println(employee.toString());
System.out.println(faculty.toString());
System.out.println(staff.toString());
}
}
//Defining class Person
public class Person {
protected String name;
protected String address;
protected String phoneNum;
protected String email;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress () {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getEmail() {
return email;
}
public void setEmail (String email) {
this.email = email;
}
@Override
public String toString() {
return "Name:"+getName()+"Class:"+this.getClass().getName();
}
}
//Defines class Student extends Person
public class Student extends Person {
public static final String FRESHMAN = "freshman";
public static final String SOPHMORE = "sophmore";
public static final String JUNIOR = "junior";
public static final String SENIOR = "senior";
protected String classStatus;
public Student(String name) {
super(name);
}
public Student(String name, String classStatus) {
super(name);
this.classStatus = classStatus;
}
@Override
public String toString() {
return "Name:"+getName()+"Class:"+this.getClass().getName();
}
}
//Defines class Employee extends Person
public class Employee extends Person {
protected double salary;
protected String office;
protected MyDate dateHired;
public Employee(String name) {
this(name, 0, "none", new MyDate());
}
public Employee(String name, double salary, String office, MyDate dateHired) {
super(name);
this.salary = salary;
this.office = office;
this.dateHired - dateHired;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getOffice() {
return office;
}
public void setOffice (String office) {
this.office = office;
}
public MyDate getDateHired() {
return dateHired;
}
public void setDateHired(MyDate dateHired) {
this.dateHired = dateHired;
}
@Override
public String toString() {
return "Name:"+getName()+"Class:" + this.getClass().getName();
}
}
//Defines class Faculty extends Employee
public class Faculty extends Employee {
public static String LECTURER = "lecturer";
public static String ASSISTANT_PROFESSOR = "assistant professor";
public static String ASSOCIATE_PROFESSOR + "associate professor";
public static PROFESSOR = "professor";
protected String officeHours;
protected String rank;
public Faculty(String name) {
this(name, "9-5 PM", "Employee");
}
public Faculty(String name, String officeHours, String rank) {
super(name);
this.officeHours = officeHours;
this.rank = rank;
}
public String getOfficeHours() {
return officeHours;
}
public void setOfficeHours(String officeHours) {
this.officeHours = officeHours;
}
public String getRank() {
return rank;
}
public void setRank(String rank) {
this.rank=rank;
}
@Override
public String toString() {
return "Name:"+getName()+"Class:"+this.getClass().getName();
}
}
//Defines class Staff extends Employee
public class Staff extends Employee {
protected String title;
public Staff(String name) {
this(name, "none");
}
public Staff(String name, String title) {
super(name);
this.title=title;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Name:"+getName()+"Class:"+this.getClass().getName();
}
}
//Define class MyDate
public class MyDate {
private int month, day, year;
public MyDate (int month, int day, int year) {
this.day=day;
this.month=month;
this.year=year;
}
}




Да, это обязательно. Один класс на файл. Класс может иметь внутренние классы. Вы можете определить подклассы как внутренние классы. Но я рекомендую поместить их в отдельные файлы и не использовать внутренние классы.
Да, в каждом файле должен быть один класс. Более того, вы используете класс MyDate в классе Employee, который вам нужно расширить, и вы не можете расширять более одного класса, поэтому лучше использовать предопределенный класс Date, который присутствует java.util.Date. Импортируйте это в класс Employee.
import java.util.Date;
вместо этого:
public Employee(String name, double salary, String office, MyDate dateHired)
использовать:
public Employee(String name, double salary, String office, Date dateHired)
Есть ошибки по невнимательности:
в классе сотрудников
public static String ASSOCIATE_PROFESSOR + "associate professor";
изменить на:
public static String ASSOCIATE_PROFESSOR = "associate professor";
Так же в классе факультета
public static String ASSOCIATE_PROFESSOR + "associate professor";
поставить = вместо +.
Теперь этот код будет работать.
Исправление, в каждом файле должен быть один класс публичный. Файлу разрешено иметь несколько непубличных классов, хотя это обычно не рекомендуется, поскольку это затрудняет обнаружение вашего кода.