상속관계에서의 객체생성 & Override

강9·2023년 12월 5일
0

Java

목록 보기
58/71
post-thumbnail

🔖 상속관계에서의 객체생성

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

상속체이닝 : 맨 위 부모클래스부터 객체가 생성되어 자식까지 연결되는 구조

super() : 상위 클래스의 생성자호출하는 메서드

  • 생성자 메서드에서 가장 첫 문장에 사용해야 한다.
  • 상위 클래스의 기본생성자를 호출하는 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)

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

    }
}
profile
코린이 일기

0개의 댓글