강의 내용
[1] 다형성을 보장한다는 의미
[2] 추상 클래스와 다형성
[1] 다형성을 보장한다는 의미
부모가 자식에게 명령을 하면 자식이 무조건 동작(반응)해야 함
다형성을 보장하려면?
다형성의 전제 조건 4가지를 무조건 지켜야 함
(1) 클래스가 상속 관계여야 함
(2) 반드시 재정의(Override) 되어야 함
(3) UpCasting : 객체 생성 방법(자식 클래스들이 서로 다르게 반응하는 원리)
(4) 동적 바인딩
재정의를 하지 않으면?
다형성이 보장되지 않음
부모가 자식에게 명령했을 때 자식이 제대로 반응하지 않음(오동작)
Q. Dog와 Cat 클래스를 설계하고 동작시켜 보시오.
public class Animal { // 동물 : 개와 고양이를 포괄 public void eat() { System.out.println("?"); // 추상적인 표현 } }
public class Dog extends Animal { // 재정의를 하지 않음 }
public class Cat extends Animal { // 재정의를 하지 않음 public void night() { System.out.println("밤에 눈에서 빛이 난다."); } }
public class IsNotOverrideTest { public static void main(String[] args) { Animal an = new Dog(); an.eat(); an = new Cat(); an.eat(); } }
재정의를 하면?
다형성이 보장됨
다형성을 보장하려면 추상 클래스 또는 인터페이스를 통해 재정의를 프로그램에서 강제로 하도록 만들어야 함
[2] 추상 클래스와 다형성
추상 클래스(불완전한 클래스)
추상 메서드를 가지고 있는 클래스
불완전한 동작으로 인해 객체를 생성할 수 없음
혼자서는 동작을 할 수 없기 때문에 자식 클래스가 반드시 있어야 함
추상 메서드를 갖는 부모를 상속 받으면 반드시 재정의해야 함
추상 메서드(불완전한 메서드)
메서드의 구현부가 없는 메서드
반드시 자식이 완전하게 재정의해야 함
자식 클래스에서 재정의하지 않으면 오류로 인해 실행할 수 없음
부모의 불완전한 메서드를 물려받으면 자식도 불완전한 클래스가 되어 버림
부모는 불완전한 클래스이지만, 상속 받은 자식은 완전해야 함
Q. Dog와 Cat 클래스를 설계하고 동작시켜 보시오.
// 추상 클래스(불완전한 클래스) public abstract class Animal { // 동물 : 개와 고양이를 포괄 public abstract void eat(); // 추상 메서드(불완전한 메서드) public void move() { // 구현 메서드 System.out.println("무리를 지어 이동한다."); } }
public class Dog extends Animal { // 재정의를 반드시 해야 함 @Override public void eat() { System.out.println("개처럼 먹다."); } }
public class Cat extends Animal { // 재정의를 반드시 해야 함 @Override public void eat() { System.out.println("고양이처럼 먹다."); } public void night() { System.out.println("밤에 눈에서 빛이 난다."); } }
public class AbstractClassTest { public static void main(String[] args) { // 추상 클래스는 단독으로 객체를 생성할 수 없지만, // Animal ani = new Animal(); // cannot be instantiated // 부모의 역할은 가능 Animal ani = new Dog(); ani.eat(); ani.move(); ani = new Cat(); ani.eat(); ani.move(); ((Cat) ani).night(); } }
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.