Variáveis de Instância

Olá, queria saber qual a diferença de se usar outros tipos para mostrar campos da classe, por exemplo
abaixo no método toString().
Tipo, usar o campo direto, usar o método ou o método com this. É a mesma coisa? ou tem diferença?


package HA4;

public class Profissao {
    
    private String nome;
    private double mdSalarial;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public double getMdSalarial() {
        return mdSalarial;
    }

    public void setMdSalarial(double mdSalarial) {
        this.mdSalarial = mdSalarial;
    }
    
    
    @Override
    public String toString() {
        return
                "Nome Profissão = "+nome+"\n"+
                "Média Salarial = "+mdSalarial+"\n"+
                
                "Nome Profissão = "+getNome()+"\n"+
                "Média Salarial = "+getMdSalarial()+"\n"+
                         
                "Nome Profissão = "+this.getNome()+"\n"+
                "Média Salarial = "+this.getMdSalarial();
        
    
    }
}


o this.

O this quer dizer o objeto em si, o this serve por exemplo no metodo setMdSalarial, la tem o o this.mdSalarial = mdSalarial.

No java a preferencia quando há 2 nomes iguais (o parametro e a variavel da classe) é do parametro.

Então o this.mdSalarial = mdSalarial diz que a variavel da classe (o que fica claro com o this) recebe o parametro (que vai por precedencia)

se fosse só mdSalarial = mdSalarial, o parametro receberia ele mesmo, ou seja nada importante aconteceria.

No caso do metodo de baixo o toString como não tem parametro com o mesmo nome é a mesma coisa.

os get e set

Bom eu tenho opniões estranhas pra média do pessoal aqui, mas neste caso de sempre ter get e set e só ter a atribuição ou o retorno dentro deles, era melhor a variavel ser public, gastaria menos processamento pois teria um metodo a menos no meio do caminho de ler ou setar a variavel, e ia dar na mesma.

Existe por que usar o set, no caso da patern observer (no java o swing chama de listener) la tem o property change listener que pode avisar uma outra classe que o valor da variavel x dessa classe mudou.

Eu uso isso de monte no meu produto, para não ficar o tempo inteiro repintando a tela, ele só pinta quando algum set é chamado em algum lugar.

Mas não é esse o caso, ai nesse exemplo, da na mesma.

[quote=heroijapa]os get e set

Bom eu tenho opniões estranhas pra média do pessoal aqui, mas neste caso de sempre ter get e set e só ter a atribuição ou o retorno dentro deles, era melhor a variavel ser public, gastaria menos processamento pois teria um metodo a menos no meio do caminho de ler ou setar a variavel, e ia dar na mesma.

Existe por que usar o set, no caso da patern observer (no java o swing chama de listener) la tem o property change listener que pode avisar uma outra classe que o valor da variavel x dessa classe mudou.

Eu uso isso de monte no meu produto, para não ficar o tempo inteiro repintando a tela, ele só pinta quando algum set é chamado em algum lugar.

Mas não é esse o caso, ai nesse exemplo, da na mesma.[/quote]

Essa economia no processamento não existe. Métodos simples como getters e setters são compilados “inline”. O compilador simplesmente copia os bytecodes do método para o local da chamada, eliminando o overhead de criar uma pillha.

O fato, é que você nunca sabe quando vai precisar refatorar o seu código, e nesses momentos, separar interface de implementação facilita muito a vida. O único caso em que uso objetos como structs são aqueles raros casos em que tenho que passar muitos parâmetros para um método ou construtor. Geralmente faço isso com uma classe interna privada, que dá acesso aos seus membros privados para classe externa.