동일한 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질입니다.
하나의 타입에 여러 객체를 대입하여 기능을 다양하게 이용할 수 있습니다.
클래스의 타입 변환은 상속 관계에 있는 클래스에서 발생합니다.
자식 타입은 부모 타입으로 자동 타입 변환이 가능합니다.
public class House {
House apart = new Apart();
House villa = new Villa();
}
바로 위에 있는 부모가 아니어도 상위 계층에 있는 타입이면 자동 타입 변환이 일어날 수 있습니다.
부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근 가능합니다.
메서드가 자식 클래스에서 오버라이딩 되었다면 자식 클래스의 메서드가 대신 호출됩니다.
실행 도중 어떤 객체를 필드에 저장하는지에 따라 실행 결과는 달라지는 것을 필드의 다형성입니다.
사용법은 동일하지만 실행 결과가 다르게 나와야 할 경우, 구현하기 위해서는 상속과 오버라이딩, 타입 변환을 사용할 수 있습니다.
부모가 가지고 있는 필드와 메서드를 사용하거나 오버라이딩을 통한 재정의된 메서드 실행으로 실행 결과를 다르게 할 수 있습니다.
House house = new House();
house.firstHouse = new Apart();
house.secondHouse = new Villa();
house.run();
void run() {
firstHouse.fee();
secondHouse.fee();
}
firstHouse와 secondHouse로 교체되면 run() 메서드를 실행하고 fee() 계산할 때는
Apart, Villa 객체의 fee()로 각각 처리된다
자동 타입 변환을 이용하여 Apart, Villa로 필드값을 교체하여 House의 run() 메서드 수정없이도 다양한 fee() 메서드 실행결과를 얻을 수 있습니다. 이것이 필드 다형성입니다.
class House {
Apart aApart = new Apart("용산", 8);
Apart aApart = new Apart("강남", 3);
Apart aApart = new Apart("서초", 5);
Apart aApart = new Apart("서대문", 12);
}
class House {
Apart[] aparts = {
Apart aApart = new Apart("용산", 8);
Apart aApart = new Apart("강남", 3);
Apart aApart = new Apart("서초", 5);
Apart aApart = new Apart("서대문", 12);
};
}
동일한 타입의 값들은 배열로 관리하는 것이 좋다.
인덱스를 이용해 자식 객체를 대입하면 자동으로 타입 변환도 이용할 수 있다.
aparts[2] = new LowAparts("ㅇㅇ", 25);
반복문을 이용하여 객체 전체를 검수할 수도 있다
for (int i = 0; i < aparts.length; i++) {
if (aparts.distance > 10) {
star =- 1;
}
}
public class Vehicle {
public void run() {
...
}
}
public class Driver {
public void drive(Vehicle vehicle) {
vehicle.run();
}
}
public class Bus extends Vehicle {
@Overrde
public void run() {
...
}
}
public class Taxi extends Vehicle {
@Overrde
public void run() {
...
}
}
public class DriverExample {
...
Driver driver = new Driver();
Bus bus = new Bus();
Taxi taxi = new Taxi();
driver.drive(bus);
driver.drive(taxi);
}
Driver 클래스 생성자 매개변수로 Vehicle의 여러 자식 클래스가 들어와도 동일한 동작을 보장한다.
추상 클래스 인터페이스 (Java 8 디폴트 메서드, 정적 메서드) (0) | 2024.01.18 |
---|---|
JPA 연관관계 매핑 (일대다, 다대일, 일대일, 다대다) (0) | 2024.01.17 |
양방향 연관관계 (mappedBy, @OneToMany, @ManyToOne) (1) | 2024.01.15 |
매핑 어노테이션 (@Enumerated, @Temporal, @Lob, @Transient, @Access) (0) | 2024.01.12 |
엔티티 매핑 (@Table, Sequence) (0) | 2024.01.11 |
댓글 영역