Entendendo a Relação 'IS-A' e 'HAS-A' em Java: Quando Usar Herança ou Composição?
O que são IS-A?
IS-A é quando uma classe "é" um tipo de outra classe. Por exemplo, um gato é um animal. No código, a classe Cat
herda de Animal
, porque um gato "é um" animal. Isso é conhecido como herança.
class Animal {
void makeSound() {
System.out.println("Animal sound");
}
}
class Cat extends Animal {
void meow() {
System.out.println("Meow!");
}
}
Aqui, Cat
é um Animal
, então ele herda as coisas que um animal pode fazer.
O que são HAS-A?
HAS-A é quando uma classe "tem" outra classe como parte dela. Por exemplo, uma bicicleta tem rodas. No código, isso é chamado de composição.
class Wheel {
void rotate() {
System.out.println("Wheel rotating...");
}
}
class Bicycle {
private Wheel wheel = new Wheel();
void ride() {
wheel.rotate();
System.out.println("Bicycle moving!");
}
}
Aqui, uma Bicycle
tem Wheel
, ou seja, a bicicleta "tem" uma roda.
Quando usar IS-A e HAS-A?
Use IS-A quando você quer que uma classe herde características de outra. Tipo, um passarinho que herda características de um animal.
HAS-A é mais legal quando você está juntando partes para formar um todo, como um carro que "tem" um motor e outras partes.
// IS-A
class Bird extends Animal {
void fly() {
System.out.println("Flying high!");
}
}
// HAS-A
class Computer {
private Processor processor = new Processor();
}
Se a coisa "é uma" outra coisa, use IS-A. Se a coisa "tem uma" outra coisa, use HAS-A.
Quando Usar Herança ou Composição?
Agora que você já manja das diferenças entre IS-A e HAS-A, a parada é entender quando usar cada um. Se você quer aproveitar e compartilhar o comportamento de várias classes, vai de herança (IS-A). Mas se quer juntar diferentes partes para criar algo novo, tipo um robô que tem braços e pernas, vai de composição (HAS-A). Saber essa diferença vai te ajudar a escrever códigos mais limpos e organizados, sem bagunça!
Conclusão
Curtiu o conteúdo? Ele foi gerado por inteligência artificial, mas foi revisado por alguém 100% Humano, me siga no Linkedin.
Fontes de produção
Ilustrações de capa: geradas por chatGPT
Conteúdo gerado por: chatGPT e revisões humanas
#JavaProgramming #BackendDev #CodingTips