Instancias

6 respostas
J

Qual a diferença entre eu herdar uma classe utilizando o comando “extends” ou eu fazer
uma intancia da classe no corpo do programa.
Quais são as vantagens e desvantagens entre os dois métodos. Não consigo entendes qual a diferença
visto que nos dois casos, eu poderei fazer uso das variaveis e metodos protected e public da superclasse.

6 Respostas

J

Não entendi sua pergunta, uma coisa não tem nada a ver com a outra, tem como dar um exemplo do que você diz não entender a diferença?

P

Amigo, depende, não entendi muito bem sua pergunta,
mas a vantagem que se tem ao herdar uma classe é aproveitar o que ela tem, e assim especificar na sua sub-classe suas características (comportamento).

Suponha que você tem uma garagem de veículos, entenda que sua garagem venda carros, motos, triciculos, jetsky, lancha… generalizando MEIOS DE TRANSPORTE,
nesta generalização, todos o meios de transporte possui caracteristicas (atributos), como: Nome, Modelo, Fabricante, Ano de Fabricação, Peso, Capacidade de pessoas, Cor… (dentre vários).

Mas também possuim caracteristicas peculiares, por exemplo carro possui: PLACA, coisa que Barcos, jetsky, lancha não possuem.
assim sua classe Carro seria uma EXTENDS de MeiosDeTransporte, herdando todas as caracteristicas dessa classe e implementando suas caracteristicas adicionais no caso a PLACA.

Meio babaca o exemplo, mas foi o melhor que me veio :lol:

Se tiver mais dúvidas explique melhor sua pergunta.
Abraços

E

Vamos às diferenças:

Quando você utiliza extends (para herdar uma classe) ou implements (para “herdar” uma interface) você está criando um relacionamento entre classes do tipo é um (IS-A) - Nesse tipo de relacionamento sua classe herda as características da classe ou interface que “extendeu”.

O outro relacionamento entre classe é o do tipo tem um (HAS-A). Esse caso é chamado de composição e você instância outras classes dentro da sua e assim tem acesso aos métodos existentes nas outras classe.

O que usar?
Dê preferência a utilizar composições no lugar de herança (afinal no Java você só poderá herdar de uma classe). Só utilize herança se precisar criar uma classe mais especializada.

J
"Evandro1979":
Dê preferência a utilizar composições no lugar de herança (afinal no Java você só poderá herdar de uma classe). Só utilize herança se precisar criar uma classe mais especializada.

Boa explicação, mas discordo dessa parte. Na minha opinião, o ideal é usar o que representa o cenario real, não baseando-se no fato de poder herdar de uma ou mais classes. Alem do mais, há outras questões envolvendo polimorfismo e outras caracteristas de herança.

O modelo abaixo não ficaria muito "bonito", nem prático:

public class Carro {

}

public class Ferrari {
   private Carro carro;
}

Já que Ferrari não TEM UM carro, e sim É UM carro, portanto o que realmente representa o cenario real é:

public class Ferrari extends Carro {

}

Um caso simples de composição seria:

public class Motor {

}

public class Carro {
   private Motor motor;
}

Pois nesse caso, no cenario real, o carro TEM UM motor, não É UM motor.

Assim a modelagem abaixo não faria sentido:

public class Carro extends Motor {

}

Enfim, modele seguindo a realidade do que está sendo representado.

É só minha opinião. :wink:

J

Srs. Obrigado pela dica, apesar de eu não ter sido muito feliz ao explicar minha duvida, vocês conseguiram me ajudar bastante, realmente a explicação que você me deram vai me ajudar muito.
Obrigado.

S

É isso que eu chamo de OO ao extremo! :lol:

Parabéns pela resposta Jair Elton!

Criado 8 de março de 2008
Ultima resposta 12 de mar. de 2008
Respostas 6
Participantes 5