/*
 * Copyright (c) 1997-1999 Departamento de Informática - UFPE
 */

/**
 * Esta classe mostra que os atributos de um objeto tamb&eacute;m podem
 * ser acessados por outros objetos da mesma classe, mesmo que sejam do
 * tipo <code>private</code>.
 */
class Encapsulation {

    /**
     * Um atributo (privado) da classe.
     */
    private int att;

    /**
     * Uma referência a um outro objeto desta classe.
     */
    private Encapsulation next;

    /**
     * Um m&eacute;todo que acessa um atributo de um outro objeto desta
     * mesma classe. Notem que este código compila sem problemas. <p>
     * O atributo de um objeto pode ser diretamente modificado
     * por outro objeto da mesma classe. Consequentemente, não
     * &eacute; verdade que os atributos de um objeto só podem ser 
     * acessados pelos m&eacute;todos deste objeto.
     */
    void met() {
        att = 5;
        next.att = 3;
    }

    /**
     * M&eacute;todo para testes.
     */
    public static void main(String args[]) {
        Encapsulation enc = new Encapsulation();
        enc.next = new Encapsulation();
        System.out.println ("Antes da chamada de met():");
        System.out.println ("  enc.att     = " + enc.att);
        System.out.println ("  enc.nextatt = " + enc.next.att);
        enc.met();
        System.out.println ("Depois da chamada de met():");
        System.out.println ("  enc.att      = " + enc.att);
        System.out.println ("  enc.next.att = " + enc.next.att);
    }
}
