Herança Múltipla

8 respostas
D

Pessoal, eu preciso de ajuda para desenvolver um código em java que resolva esse desafio. Seria de grande ajuda pra mim. Obrigado

8 Respostas

nel

danieldavid666:
Pessoal, eu preciso de ajuda para desenvolver um código em java que resolva esse desafio. Seria de grande ajuda pra mim. Obrigado
http://www.inf.pucrs.br/manssour/LinguagemC++/HerancaMultipla.pdf

E o que você já fez ? :slight_smile:
E só para deixar claro, não existe Herança Multipla em Java, portanto, terá que buscar outras alternativas.

P.s: não li o problema.

D

Eu dei uma pesquisada, sei que devo usar Interface, mas nao sei implementar

D

Olá, não li todo o desafio, mas lhe adianto que no java não existe herança múltipla, não há como um objeto estender de dois ou mais objetos, um objeto pode implementar uma ou mais interfaces mas não estender de duas ou mais classes, se o desafio for necessariamente baseado em herança múltipla não será possível fazer, se você tiver autonomia para chegar ao objetivo do desfio utilizando outros recursos acredito que será possível usando Java.

nel

Já temos uma saída :slight_smile:
Isso significa que algo tu pesquisou, isso é bom.

Mas não vou ler o PDF todo, podes resumidamente, descrever o problema e o que tu já fez ? :slight_smile:

D

Para exemplificar, considere a definição de uma classe “clock”, cujos objetos armazenam o tempo, e uma
classe “calendar”, cujos objetos armazenam a data. Pode-se então usar a herança múltipla para derivar uma
nova classe “clock_calendar”, cujos objetos armazenam ambos, o tempo e a data.
Eu Já cria a classe clock e a classe calendar, agora falta criar a terceira classe.

E

O PDF só descreve a implementação de herança múltipla em C++ e seus problemas. Não diz o que o Daniel deseja fazer.

D
danieldavid666:
Eu dei uma pesquisada, sei que devo usar Interface, mas nao sei implementar

por exemplo, a interface alutomóvel

public interface Automovel {
     void acelerar();
}

implementando-a

public class Gol implements Automovel {
   void acelerar(){}  
}

public class Saveiro implements Automovel {
   void acelerar(){}  
}
rogeriopaguilar

Você pode utilizar interfaces e composição para simular o que você quer.
Fiz o código abaixo como exemplo:

package teste.gambi;

import java.util.Calendar;


interface InterfaceCalendario {

	public void setDia(int dia);
	public void setMes(int mes);
	public void setAno(int ano);
	public int getDia();
	public int getMes();
	public int getAno();
	
}

interface InterfaceRelogio {

	public void setHora(int hora);
	public void setMinuto(int minuto);
	public void setSegundo(int segundo);
	public int getHora();
	public int getMinuto();
	public int getSegundo();
	
}

class RelogioDefault implements InterfaceRelogio{
	
	private int hora, minuto, segundo;

	public RelogioDefault() {
		super();
		Calendar c = Calendar.getInstance();
		setHora(c.get(Calendar.HOUR));
		setMinuto(c.get(Calendar.MINUTE));
		setSegundo(c.get(Calendar.SECOND));
	}

	public RelogioDefault(Calendar c) {
		super();
		setHora(c.get(Calendar.HOUR));
		setMinuto(c.get(Calendar.MINUTE));
		setSegundo(c.get(Calendar.SECOND));
	}
	
	
	@Override
	public void setHora(int hora) {
		this.hora = hora;
	}

	@Override
	public void setMinuto(int minuto) {
		this.minuto = minuto;
	}

	@Override
	public void setSegundo(int segundo) {
		this.segundo = segundo;
	}

	@Override
	public int getHora() {
		return this.hora;
	}

	@Override
	public int getMinuto() {
		return this.minuto;
	}

	@Override
	public int getSegundo() {
		return this.segundo;
	}

	@Override
	public String toString() {
		return "RelogioDefault [hora=" + hora + ", minuto=" + minuto
				+ ", segundo=" + segundo + "]";
	}

	
	
}

class CalendarioDefault implements InterfaceCalendario {
	private int dia, mes, ano;

	
	
	public CalendarioDefault() {
		super();
		Calendar c = Calendar.getInstance();
		setDia(c.get(Calendar.DATE));
		setMes(c.get(Calendar.MONTH));
		setAno(c.get(Calendar.YEAR));
	}

	public CalendarioDefault(Calendar c) {
		super();
		setDia(c.get(Calendar.DATE));
		setMes(c.get(Calendar.MONTH));
		setAno(c.get(Calendar.YEAR));
	}
	
	
	@Override
	public int getDia() {
		return dia;
	}

	@Override
	public void setDia(int dia) {
		this.dia = dia;
	}

	@Override
	public int getMes() {
		return mes;
	}

	@Override
	public void setMes(int mes) {
		this.mes = mes;
	}

	@Override
	public int getAno() {
		return ano;
	}

	@Override
	public void setAno(int ano) {
		this.ano = ano;
	}

	@Override
	public String toString() {
		return "CalendarioDefault [dia=" + dia + ", mes=" + mes + ", ano="
				+ ano + "]";
	}
	
	
	
}

interface SuperGambiHeranca extends InterfaceRelogio, InterfaceCalendario{
	
	public InterfaceCalendario getCalendarioDelegate();
	public InterfaceRelogio getRelogioDelegate();
	public void setRelogioDelegate(InterfaceRelogio relogioDelegate);
	public void setCalendarioDelegate(InterfaceCalendario calendarioDelegate);
	
}


public class TesteGambi implements SuperGambiHeranca{
	
	private InterfaceRelogio relogioDelegate;
	private InterfaceCalendario calendarioDelegate;
	
	public TesteGambi() {
		Calendar c = Calendar.getInstance();
		setRelogioDelegate(new RelogioDefault(c));
		setCalendarioDelegate(new CalendarioDefault(c));
	}
	

	public InterfaceRelogio getRelogioDelegate() {
		return relogioDelegate;
	}
	
	public void setRelogioDelegate(InterfaceRelogio relogioDelegate) {
		this.relogioDelegate = relogioDelegate;
	}
	
	public InterfaceCalendario getCalendarioDelegate() {
		return calendarioDelegate;
	}
	
	public void setCalendarioDelegate(InterfaceCalendario calendarioDelegate) {
		this.calendarioDelegate = calendarioDelegate;
	}

	public void setHora(int hora) {
		relogioDelegate.setHora(hora);
	}

	public void setMinuto(int minuto) {
		relogioDelegate.setMinuto(minuto);
	}

	public void setSegundo(int segundo) {
		relogioDelegate.setSegundo(segundo);
	}

	public int getHora() {
		return relogioDelegate.getHora();
	}

	public int getMinuto() {
		return relogioDelegate.getMinuto();
	}

	public int getSegundo() {
		return relogioDelegate.getSegundo();
	}

	public void setDia(int dia) {
		calendarioDelegate.setDia(dia);
	}

	public void setMes(int mes) {
		calendarioDelegate.setMes(mes);
	}

	public void setAno(int ano) {
		calendarioDelegate.setAno(ano);
	}

	public int getDia() {
		return calendarioDelegate.getDia();
	}

	public int getMes() {
		return calendarioDelegate.getMes();
	}

	public int getAno() {
		return calendarioDelegate.getAno();
	}
	
	

	@Override
	public String toString() {
		return "TesteGambi [relogioDelegate=" + relogioDelegate
				+ ", calendarioDelegate=" + calendarioDelegate + "]";
	}

	public static void main(String[] args) {
		
		SuperGambiHeranca objGambiHeranca = new TesteGambi();
		System.out.println(objGambiHeranca.toString());
		
		InterfaceRelogio relogio = (InterfaceRelogio) objGambiHeranca.getRelogioDelegate();
		InterfaceCalendario calendario = (InterfaceCalendario) objGambiHeranca.getCalendarioDelegate();

		System.out.println(relogio.toString());
		System.out.println(calendario.toString());
		
	}
	
}
Criado 19 de março de 2013
Ultima resposta 20 de mar. de 2013
Respostas 8
Participantes 5