Se la parte di rappresentazione dell'astrazione di tipo è dichiarata privata, allora in che modo la sottoclassificazione viola l'incapsulamento?

1

Qui , ho appreso che la sottoclassificazione viola l'incapsulamento:

it violates encapsulation, since the implementations of the superclass and subclass become tightly coupled

Ad esempio, se consideriamo la sintassi Java sottostante, un class ha accesso a tutti i campi e i metodi della sua super classe a condizione che non siano dichiarati private .

class Person{
    private String name;
    String address;
    //methods of class Person
}

class Employee extends Person{
    float salary;
    private Employee immedateManager;
    private raiseSalary(float raise){...}
}

class Manager extends Employee{
    String department;

    void test(){
        name = "Fred";   //compiler error, could not break encapsulation
        salary = 70000.00f;
        address = "somewhere";
        immediateManager = "Slate"; //compiler error, could not break encapsulation
        raiseSalary(1234.0);    //compiler error, could not break encapsulation
    }
}

Quindi, se la parte di rappresentazione dell'astrazione di tipo (Java class ) è dichiarata private , allora come si comprende prima di dire che la sottoclassificazione viola l'incapsulamento?

    
posta overexchange 16.06.2015 - 09:02
fonte

1 risposta

1

Non ha nulla a che fare con la privacy. Una parte integrante della tua classe non è più implementata all'interno della tua classe. Per definizione è una perdita di incapsulamento.

Tuttavia, i programmatori orientati agli oggetti a volte attribuiscono un'enorme importanza all'incapsulamento a livello di classe. Gli altri problemi con l'ereditarietà, come l'accoppiamento, sono molto più importanti e la perdita di incapsulamento non dovrebbe infastidirti in situazioni in cui l'ereditarietà sia altrimenti appropriata.

    
risposta data 16.06.2015 - 15:12
fonte

Leggi altre domande sui tag