Exemplo simples de heranca em java

11 respostas
F
package org.gpl.teste;

interface pessoa {
    public String getNome();
    public void   setNome(String nome);
}

abstract class funcionario implements pessoa {

    public abstract int getMatricula();
    public abstract void setMatricula(int matricula);
}

class programador extends funcionario {

    private String nome;
    private int matricula;

    public programador() {};

    public String getNome(){
        return this.nome;
    }

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

    public int getMatricula() {
        return this.matricula;
    }

    public void setMatricula(int matricula) {
        this.matricula = matricula;
    }

    public String programar() {
        return "programando";
    }
}

class coordenador extends funcionario {
    private String nome;
    private int matricula;

    public coordenador(){};

    public String getNome(){
        return this.nome;
    }

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

    public int getMatricula() {
        return this.matricula;
    }

    public void setMatricula(int matricula) {
        this.matricula = matricula;
    }

    public String mandar () {
        return "Mandando";
    }

}

public class MainClass {
    public static void main(String[] args) {
        coordenador coor = new coordenador();
        programador prog = new programador();

        funcionario fprg = new programador();
        funcionario fcrd = new coordenador();

        funcionario temp;


        prog.setMatricula(100);
        prog.setNome("Joao");

        coor.setMatricula(101);
        coor.setNome("Jose");

        System.out.println(prog.getMatricula() + prog.getNome());
        System.out.println(coor.getMatricula() + coor.getNome());


        fprg.setMatricula(102);
        fprg.setNome("maciel");

        fcrd.setMatricula(103);
        fcrd.setNome("bernardo");

        System.out.println(fprg.getMatricula() + fprg.getNome());
        System.out.println(fcrd.getMatricula() + fcrd.getNome());

        temp = fprg;
        fprg = fcrd;
        fcrd = temp;

        System.out.println(fprg.getMatricula() + fprg.getNome());
        System.out.println(fcrd.getMatricula() + fcrd.getNome());

    }
}

Tava dando umas aulinhas via ICQ e resolvi postar um exemplo simples sobre herança ,

11 Respostas

J

Muito bom post:D. Mas, diga-me, se eu herdar um método, obrigatoriamente a assinatura e modificadores de acesso tem de ser os mesmos na classe filha? se eu tentar mudar, ele compila? Ou, que tipo de excecão ele manda?

A

Se você herdar, você não precisa implementar o método.
Agora, se você precisar que o método faça coisas diferentes do método da superclasse, você pode sobrescrever (override).

J

Andre,

O Override deve ter a mesma assinatura do método da superclasse, mas deve ter implementacão diferente na classe filha, é isso?

[]'s

S

julianazma:
Andre,

O Override deve ter a mesma assinatura do método da superclasse, mas deve ter implementacão diferente na classe filha, é isso?

[]'s

Um método sobre-escrito tem que ter a mesma assinatura. Mas a assinatura são apenas o nome e o conjunto de argumentos com respectivos tipos.

Vc pode sobre-escrever um método e mudar a sua declaração ( conjunto de tudo o que pode ser incluido na declaração do método)
mas ha regras.

  1. o filho não pode ser menos visível que o pai
  2. o filho não pode lançar mais exceções verificadas que o pai.
J

Blz, Sergio, td entendido. Obrigada:D

S

class coordenador extends funcionario {

private String nome;

private int matricula;

public coordenador(){};

quando vc escreveu esse trecho do programa
vc cria a classe coordenador sem especificação se é public ou private ou abstract…
e depo8is põe la em baixo

public coordenador(){}

não fica algo redundante? eu poderia colocar o public logo na primeira linha quando cria-se a classe?
ou isso daria algum problema futuro?

espero q alguem ainda veja minha pergunta =]
obrigado de qq forma

J

Sergio não esqueça que Public é simplesmente um comando
para o compilador “JVM” determinar o nível de acesso a tua entidade.
Ou seja você define o escopo de acesso a tua classe.

Bem, ao usar:

class Coordenador extends Funcionario

nada impede de utilizar funcionalidade exclusivas a um coordenador, bem
como a de um funcionário.

OOD - O Projeto de software orientado a objetos, tem como base a percepção que o
ser humano tem das coisas. Pare e pense; que relação existe entre uma
entidade com outra no ponto de vista humano?

Assim sendo não existe restrições como public Coordenador(){}.
Dando inicio a operações exclusivas a um Coordenador.

Ok?

Saudações

S

poxxa pessoal mto obrigado mesmo :smiley:
tanto a quem fez o post quanto ao jidlafe q tirou minha ultima duvida agora
ja deu pra adiantar mto do meu trabalho
abraço!

só por dizer mesmo… meu trabalho é pra Fazer uma Floreste, devem haver animais e plantas e elas devem interagir umas com as outras
tipo, animal carnivoro e herbivoro, planta frutifera afrutifera e venenosa
o cliente deve entrar com um inteiro q sera o numero de ciclos da floresta e a saída será o q aconteceu na floresta durante estes ciclos

bem chatinho né? rsrsrs minha maior preocupação é quanto a esses ciclos, como faze-los sabe?
se alguem quizer me dar uma idéia =]
abração pessoal

J

Puxa cara, Legal.

Mas por enquanto tire o foco da aplicação e se coloque na posição de seu cliente.
Pense o que ele tem como objetivo. Porque isso é importante para Ele, o quanto isto
vai impactar na relação dele com a futura aplicação e as pessoas com quem Ele interage “Colegas de trabalho”.

Após isso, vai analisando a situação - Floresta, com todos os seus componentes.

Vai criando a relação existente entre eles, qual a árvore de herança entre as espécies
e como elas se comportam.

Vai postando no Fórum - “Arquitetura de Sistemas” (Engº) .

Saudações.

C
fmeyer:
package org.gpl.teste;

interface pessoa {
    public String getNome();
    public void   setNome(String nome);
}

abstract class funcionario implements pessoa {

    public abstract int getMatricula();
    public abstract void setMatricula(int matricula);
}

class programador extends funcionario {

    private String nome;
    private int matricula;

    public programador() {};

    public String getNome(){
        return this.nome;
    }

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

    public int getMatricula() {
        return this.matricula;
    }

    public void setMatricula(int matricula) {
        this.matricula = matricula;
    }

    public String programar() {
        return "programando";
    }
}

class coordenador extends funcionario {
    private String nome;
    private int matricula;

    public coordenador(){};

    public String getNome(){
        return this.nome;
    }

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

    public int getMatricula() {
        return this.matricula;
    }

    public void setMatricula(int matricula) {
        this.matricula = matricula;
    }

    public String mandar () {
        return "Mandando";
    }

}

public class MainClass {
    public static void main(String[] args) {
        coordenador coor = new coordenador();
        programador prog = new programador();

        funcionario fprg = new programador();
        funcionario fcrd = new coordenador();

        funcionario temp;


        prog.setMatricula(100);
        prog.setNome("Joao");

        coor.setMatricula(101);
        coor.setNome("Jose");

        System.out.println(prog.getMatricula() + prog.getNome());
        System.out.println(coor.getMatricula() + coor.getNome());


        fprg.setMatricula(102);
        fprg.setNome("maciel");

        fcrd.setMatricula(103);
        fcrd.setNome("bernardo");

        System.out.println(fprg.getMatricula() + fprg.getNome());
        System.out.println(fcrd.getMatricula() + fcrd.getNome());

        temp = fprg;
        fprg = fcrd;
        fcrd = temp;

        System.out.println(fprg.getMatricula() + fprg.getNome());
        System.out.println(fcrd.getMatricula() + fcrd.getNome());

    }
}
saida do programa:
100 Joao 101 Jose 102 maciel 103 bernardo 103 bernardo 102 maciel

Tava dando umas aulinhas via ICQ e resolvi postar um exemplo simples sobre herança ,,,

Ow amigo blz?

Tava precisando de um exemplo mais detalhado sobre como usar Herança e quero outro separado de polimorfismo.

Aguardo retorno.

J

Dá uma olhada:

http://guj.com.br/posts/list/137973.java

Criado 7 de maio de 2005
Ultima resposta 13 de set. de 2009
Respostas 11
Participantes 7