Tópicos da O.O

3 respostas
Kesia_Seles

Olá pessoal, tudo bem?

Alguém pode me dizer se existe alguma semelhança entre Herança, Polimorfismo e Interfaces?
Quais são elas?

Vlw

3 Respostas

ViniGodoy

Não existe qualquer semelhança. Existe é uma relação entre as três.

blackfalcon
Kesia Seles:
Olá pessoal, tudo bem?

Alguém pode me dizer se existe alguma semelhança entre Herança, Polimorfismo e Interfaces?
Quais são elas?

Vlw

Herença é utilizado para herdar metodos e atributos comuns. Por exemplo, toda pessoa tem nome. Correto? Mas existe pessoa que tem cfp e outras cnpj. Nesse caso, poderiamos criar uma classe chamada Pessoa e outras duas chamada PessoaJuridica e PessoaFisica e usar a palavra extends para herdar o atributo e metodo nome, pois em ambas sao iguais, mas tambem, ao mesmo tempo, criar os atributos e metodos de cfp e cpjn, cada um de acordo com sua classe. Isso é Herença.

Polimorfismo é bem parecido, mas como o proprio nome diz "muitas formas", e permite que tipos mais abstratos referenciem classes mais amplas. Ou seja, nas classes mais abstratas voce cria os metodos que terao na outras classes tambem, porem, nelas, voce tera que deixar de um modo que atenda o que ela precisa. Dai entao voce cria um objeto do tipo:

package tipopessoa;

public class Main {

    public static void main(String[] args) {
        Pessoa pf = new PessoaFisica();
        pf.setNome("blackfalcon");
        System.out.println(pf.getNome());
    }
}
package tipopessoa;

public class Pessoa {
    private String nome = "";
    
    public void setNome(String nome){
        this.nome = nome;
    }
    
    public String getNome(){
        return nome;
    }
}
package tipopessoa;

public class PessoaFisica extends Pessoa {
    private String cpf = "";
    private String nome = "";
    
    
    public void setCPF(String cpf){
        this.cpf = cpf;
    }
    
    public String getCPF(){
        return cpf;
    }
    
    public void setNome(String nome){
        this.nome = nome;
    }
    
    public String getNome(){
        return "Meu nome é: "+nome;
    }
}

Veja ai que na classe Pessoa eu crio um metodo setNome e getNome e depois na classe PessoaFisica eu tambem crio. Na verdade, o que eu estou fazendo é rescrever estes metodos.

Por exemplo, se criarmos um objeto do tipo:

Pessoa p = new Pessoa();

Quer dizer que esse objeto chamado p tera os metodos que tem la na classe Pessoa. Porem, se declararmos um do seguinte modo (e ele estender de pessoa, nesse caso):

Pessoa p = new PessoaFisica();

O objeto p ainda sera do tipo pessoa, porem, caso exista algum metodo semelhante entras as duas classes, ela se comportara como uma PessoaFisica e nao como uma Pessoa, entende?

Abraços

Kesia_Seles

Entendi!
Obrigada!

Criado 14 de maio de 2010
Ultima resposta 15 de mai. de 2010
Respostas 3
Participantes 3