Polimorfismo X Heranca[RESOLVIDO]

12 respostas
ceceu

Pessoal eu gostaria de um exemplo bem simples de polimorfismo e queria entender a sua finalidade.

Qual a relacao que Heranca tem com Polimorfimso?

aguardo resposta.

12 Respostas

rubensdemelo

Polimorfismo

Herança

Herança:

Pai -> Filho

O Filho “herda” do pai algumas característica.

Polimorfismo: (poli=[color=red]muitas [/color]morfismo=[color=red]formas[/color])

Ser humano pode ser: Criança, Adulto, Adolescente, Idoso, etc, mas todos são seres humanos

Pessoa pode ser Física ou Jurídica

Física ou Jurídica tem suas peculiaridades, porém são pessoas.

jyoshiriro

Veja se essa discussão
http://www.guj.com.br/posts/list/137852.java
ajuda.

I

Pessoal tenho uma duvida com relação a herança… tipow…

eu tenho uma Classe chamada Funcionario…
que tem o o metodo getSalarioBase;

ai eu criei um subclasse que herda de funcionario chamada FEnsinoMedio e acrescentei o método getSalario();

instanciei da seguinte forma… Funcionario func = new FEnsinoMedio();

gostaria de saber, o objeto func vai ter caracteristicas de Funcionario ou de FEnsinoMedio???

vou explicar o meu problema…

Funcionario[] func = { new FEnsinoBasico(),new FEnsinoBasico(), new FEnsinoBasico(), new FEnsinoBasico(),
new FEnsinoMedio(), new FEnsinoMedio(), new FEnsinoMedio(), new FEnsinoMedio(),
new FEnsinoSuperior(), new FEnsinoSuperior()};

eu criei esse array de funcionarios com 4 FEnsinoBasico 4 FEnsinoMedio e 2 FEnsinoSuperior todos tem um método getSalario() so que implementado de jeitos diferentes…

eu quero somar o total de todos os salarios… eu pensei em usar um for… so que ai que ta…

quando faço tipo

for( int i =0; i < func[i].length; i++ )

{

totalSalario += func[i].getSalario();

}

o metodo getSalario so esta implementado nas classes filhas e nao na classe pai…

alguem poderia me ajudar???

rubensdemelo

:cry:

fantomas

Você fêz como?

Foi assim?

public class FEnsinoBasico extends Funcionario {
	
	public Double getSalario() {
		return new Double(10.20);
	}
}
public class FEnsinoMedio extends Funcionario {
	
	public Double getSalario() {
		return new Double(30.40);
	}
}
public class FuncionarioTest {
	
	public static void main(String... args) {
		
		Funcionario[] funcionarios = new Funcionario[]{new FEnsinoMedio(), new FEnsinoBasico()};
		
		for(Funcionario f : funcionarios ) {
			System.out.println(f.getSalario());
		}
	}
}

P.S Este código exemplo foi construido com o intuito de melhorar a comunicação entre os participantes (nós).

flws

E

itopaulo:
o metodo getSalario so esta implementado nas classes filhas e nao na classe pai…

Você tem de declarar o método getSalario na classe pai ou como “abstract”:

public abstract double getSalario();

ou então você implementa o método getSalario na classe pai, mas faz com que ele lance uma exceção se for diretamente chamado.

public double getSalario() {  throw new RuntimeException ("Não implementado"); }

No seu caso, é melhor declarar como ‘abstract’.

I

Ai ja consegui resolver o meu problema…

Quando instancio um variavel com a referencia de uma classe filha… o objeto criado tera todos os métodos da classe pai… e se metodos foram incluidos nas classes filhas… eles nao serao enxergados… mas
caso a classe tenha o metodos das classes filhas ( a final as filhas herdaram da pai) esses métodos estaram implementados cada um com as caracteristicas da referencia…

fantomas

:shock:

Desculpem, esqueci de enviar a class mais importante da questão. :(

public abstract class Funcionario {
	
	 public  abstract Double getSalario();
}

flws

I

enantiomero

heheh valeu…
eu n tinha reparado isso… eu nao tinha declarado na classe pai o metodo getSalario()…

e entendi tb q quando eu chamar o objeto: por exemplo

Funcionario func = new FEnsinoMedio();

func.getSalario();

esse objeto fucn tera as implementacoes do FEnsinoMedio neh???

hahaha puts… eu tava me matando aki para tentar entender o que tava acotnencendo…

valeu galera!!!

I

Eu posso declarar um metodo abstract dentro de uma classe publica???
tipo… so aquele método eu n quero que seja inicializado… caso a classe seja instanciada… so quero q esse metodo seja herdado e implementado em outras classes…
pode isso???

faz sentido ou eh sempre bom declarar abstract na classe toda?

rubensdemelo

itopaulo:
Eu posso declarar um metodo abstract dentro de uma classe publica???
tipo… so aquele método eu n quero que seja inicializado… caso a classe seja instanciada… so quero q esse metodo seja herdado e implementado em outras classes…
pode isso???

faz sentido ou eh sempre bom declarar abstract na classe toda?

Pode. Faz muito sentido.

I

VALEUUUUUUUUUUUUU

Criado 11 de setembro de 2009
Ultima resposta 11 de set. de 2009
Respostas 12
Participantes 6