Ho appreso quanto segue dal libro Core Java, Volume I - Fondamenti (ottava edizione)> Capitolo 5: Ereditarietà> sezione "Accesso protetto" (Pagina 205).Un oggetto di una sottoclasse può accedere a un campo protetto di un altro oggetto di un'altra sottoclasse?
Ci sono momenti, tuttavia, quando si desidera limitare un metodo per sottoclassi solo o, meno frequentemente, per consentire metodi delle sottoclassi di accedere un campo della superclasse. In tal caso, si dichiara una funzione di classe come protetta . Ad esempio, se il dipendente superclasse dichiara il campo rentday come protetto anziché privato, i metodi Manager possono accedervi direttamente.
Tuttavia, i metodi di classe Manager possono dare un'occhiata all'interno del campo hireDay solo degli oggetti Manager, non di altri oggetti Employee. Questa restrizione viene effettuata in modo che non è possibile abusare del meccanismo protetto e creare sottoclassi solo per accedere ai campi protetti.
Ho scritto il seguente codice per testarlo.
class Employee
{
protected String name;
public Employee(String name) {
this.name = name;
}
}
class Manager extends Employee
{
public Manager(String name) {
super(name);
}
public void peekName(Employee e) {
System.out.println("name: " + e.name);
}
}
class Executive extends Employee
{
public Executive(String name) {
super(name);
}
}
public class TestProtectedAccess
{
public static void main(String[] args) {
Employee e = new Employee("Alice Employee");
Manager m = new Manager("Bob Manager");
Executive ex = new Executive("Charles Executive");
// Manager object accessing protected name of Employee object
m.peekName(e);
// Manager object accessing protected name of Executive object
m.peekName(ex);
}
}
L'output del codice è:
$ java TestProtectedAccess
name: Alice Employee
name: Charles Executive
L'oggetto Manager m
è in grado di accedere campo protetto name
di altri collaboratori oggetti e
e ex
. Questo sembra contraddire quello che ho citato sopra dal libro, specialmente la parte che ho evidenziato in grassetto.
Qualcuno può spiegarmi se il libro è sbagliato o la mia comprensione è sbagliata? Se la mia comprensione è sbagliata, puoi suggerire un esempio migliore per capire cosa significa il libro?
Sì si può sicuramente farlo. –