Porque?

Gente,

Desculpando a minha ignorância, porque um objeto tem acesso a atributos PRIVATE de um outro objeto do mesmo tipo ? Que sentido faz isso ?

Dêem uma olhada no exemplo abaixo, notem que dentro do método checkOnibus eu crio um outro objeto Onibus , variável b, e consigo alterar o conteúdo do atributo id diretamente sem passar pelo método setId().

public class Onibus {
    private int id;
    private int ano;
    private int qtdePoltronas;
    
    /** Creates a new instance of Onibus */
    public Onibus() {
    }
    
    public void checkOnibus() {
        Onibus b = new Onibus();
        b.id = 4343;
        System.out.println("objeto b " + b.id );
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

Estou tentando achar literatura que me explique qual a utilidade disso. Deve ter alguma boa explicação. Infelizmente eu não consegui encontrar… Até arrisco a falar que isso pode gerar problemas. Imaginem se eu tivesse algum tipo de validação no meu método setId() .

Obrigado

Oi azevedomt,

isso acontece porque você está se referindo ao mesmo objeto. Um atributo com visibilidade private pertence ao mesmo objeto. Então todo objeto Onibus terá acesso aos seus atributos, sendo eles private, public, protected ou de pacote.

Crie uma outra classe, chamada de Carro, e nela instancie um objeto do tipo Onibus e tente acessar seus atributos privates (sem ser pelos método acessores).

Se tiver dúvidas poste novamente. :joia: