Я изучаю наследование на Java и книгу, которую изучаю, использует класс Employee
, чтобы объяснить несколько концепций. Поскольку в одном из java-файлов с одним и тем же именем может быть только один (общедоступный) класс, и этот класс создает объекты другого класса, я должен определить класс Employee в том же файле без модификатора public
. У меня создалось впечатление, что классы, определенные этим способом после того, как другое тело класса в одном и том же java-файле не видны другим классам в одном пакете. Вот пример кода Java для демонстрации:Как сделать (частный) класс в java, который не виден другим классам в одном пакете?
package book3_OOP;
public class TestEquality3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Employeee emp1 = new Employeee("John", "Doe");
Employeee emp2 = new Employeee("John", "Doe");
if (emp1.equals(emp2))
System.out.println("These employees are the same.");
else
System.out.println("Employees are different.");
}
}
class Employeee {
private String firstName, lastName;
public Employeee(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public boolean equals(Object obj) {
//object must equal itself
if (this == obj)
return true;
//no object equals null
if (obj == null)
return false;
//test that object is of same type as this
if(this.getClass() != obj.getClass())
return false;
//cast obj to employee then compare the fields
Employeee emp = (Employeee) obj;
return (this.firstName.equals (emp.getFirstName())) && (this.lastName.equals(emp.getLastName()));
}
}
Например, класс Employeee
виден всем классам в пакете book3_OOP
. В чем причина дополнительного «e» в Employee. На данный момент у меня есть около 6 классов сотрудников в этом пакете, таких как Employee5, Employee6 и т. Д.
Как обеспечить, чтобы второй класс, определенный таким образом в файле .java, не подвергался другим классам в одном пакете? Использование других модификаторов, таких как ошибки private
или protected
.
Сделайте Employee частным внутренним классом. –
Прочтите [this] (https://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html) для получения дополнительной информации о * внутренних классах * (например, предложенный PM 77-1). – Tom