MobilePhone을 SmartPhone이 상속한다.
class SmartPhone extends MobilePhone{...}
Is-a
관계이고, 상속 관계에 있는 두 대상은 Is-a
여야 한다.Is-a
관계를 갖지 않는 두 클래스가 상속으로 연결되어 있다면, 적절한 상속인지 의심해야 한다.// is a
class Notebook extends Computer{
}
//has a
class Computer {
Memory SSD;
}
public class Main {
public static void main(String[] args) {
ColorTV myTV = new ColorTV(32, 1024);
myTV.printProperty();
IPTV iptv = new IPTV("192.1.1.2", 32, 2048); // "192.1.1.2" 주소에 32인치, 2048컬러
iptv.printProperty();
}
}
class TV {
private int size;
public TV(int size) {
this.size = size;
}
public int getSize() {
return size;
}
}
class ColorTV extends TV {
private int color;
ColorTV(int size, int color) {
super(size);
this.color = color;
}
public void printProperty() {
System.out.println(super.getSize() + " inch " + color + " color");
}
}
class IPTV extends ColorTV {
private String address;
IPTV(String address, int size, int color) {
super(size, color);
this.address = address;
}
public void printProperty() {
System.out.print('"' + address + '"' + " 주소에 ");
super.printProperty();
}
}
다형성
은 객체 지향 프로그래밍의 중요한 개념 중 하나입니다. 이 개념은 한 가지 형태나 타입의 객체가 다양한 방식으로 동작할 수 있는 능력을 의미합니다.자바에서 다형성은 클래스들 간의 상속과 인터페이스 구현을 통해 구현됩니다. 한 클래스가 다른 클래스를 상속하거나 인터페이스를 구현할 때, 그 클래스는 상속받은 클래스나 인터페이스의 메서드를 오버라이딩하고 새로운 동작을 정의할 수 있습니다.
예를 들어, 동물을 나타내는 Animal 클래스가 있고, 이를 상속받아 각각의 동물을 나타내는 Dog, Cat, Bird 클래스가 있다고 가정해봅시다. 이들 클래스는 Animal 클래스의 메서드를 오버라이딩하여 각 동물의 특징과 동작을 정의할 수 있습니다. 그리고 다형성을 통해 Animal 타입의 변수를 사용하여 Dog, Cat, Bird 객체를 다룰 수 있습니다.
이러한 다형성은 유연성
과 확장성
을 제공합니다. 다형성을 사용하면 같은 코드에서 다양한 타입의 객체를 처리할 수 있으며, 코드의 재사용성을 높일 수 있습니다. 또한, 다형성은 상속과 인터페이스를 통해 설계된 계층적인 구조에서 객체들 간의 관계를 명확하게 표현할 수 있습니다.
이를 통해 코드의 가독성과 유지보수성을 향상시킬 수 있으며, 소프트웨어 개발에서 객체 지향적인 설계와 구현을 도와줍니다.