✅ Upcasting
(업캐스팅) : 부모가 자식을 가리키는 객체생성 방법
부모클래스
변수명
= new
자식클래스명()
;
// 부모클래스(Animal)
public class Animal {
public void eat() {
System.out.println("먹다.");
}
}
// 자식클래스(Dog)
public class Dog extends Animal{
}
// 자식클래스(Cat)
public class Cat extends Animal {
public void night() {
System.out.println("밤에 눈에서 빛이 난다.");
}
}
// Dog, Cat 객체 사용 예시
import fc.java.model.Animal;
import fc.java.model.Cat;
import fc.java.model.Dog;
public class DogCatUpcastingTest {
public static void main(String[] args) {
// Dog d = new Dog();
// d.eat();
Animal a = new Dog();
a.eat(); // 먹다.
a = new Cat();
a.eat(); // 먹다.
}
}
상속체이닝
: 맨 위 부모클래스
부터 객체가 생성되어 자식까지 연결되는 구조
super()
: 상위 클래스의 생성자를 호출하는 메서드
public class Object {
}
public class Animal extends Object {
public Animal() {
super();
}
}
public class Dog extends Animal {
public Dog() {
super();
}
}
Dog x = new Dog();
Animal x = new Dog(); // *Upcasting
Override
: 상속관계에서 하위클래스가 상위클래스의 동작을 재정의
하는 행위(기능 추가, 변경)
동적바인딩
: 실행시점에서 사용될 메서드가 결정되는 바인딩
public class Dog extends Animal{
public void eat() {
System.out.println("개처럼 먹다.");
}
}
public class Cat extends Animal {
public void night() {
System.out.println("밤에 눈에서 빛이 난다.");
}
public void eat() {
System.out.println("고양이처럼 먹다.");
}
}
import fc.java.model.Animal;
import fc.java.model.Cat;
import fc.java.model.Dog;
public class OverrideTest {
public static void main(String[] args) {
// Upcasting(업캐스팅)
Animal a = new Dog();
a.eat(); // Animal --> (동적바인딩) --> Dog
a = new Cat();
a.eat(); // Animal --> (동적바인딩) --> Cat
}
}