본문 바로가기

Java/본격 Java 퀴즈 기초

[Java] 동물 울음소리 (다형성(polymorphism) 이용)

상위 클래스를 여러가지 클래스로 상속할 수 있다,

다형성이란 상위클래스로 인스턴스를 만들고 하위클래스로 객체를 만들 수 있다.

.

.

상위클래스인 Animal 클래스를 만든다.

package Animal;

public class Animal {
	public Animal() {}
	public void makeNoise() {
		System.out.println("Bark");
	}
}

.

.

Animal 클래스를 상속받을 하위 클래스 3개를 만든다.

package Animal;

public class Dog extends Animal{
	public Dog() {}
	public void makeNoise() {
		System.out.println("멍멍");
	}

}
package Animal;

public class Cat extends Animal {
	public Cat() {}
	public void makeNoise() {
		System.out.println("야옹");
	}

}
package Animal;

public class BigDog extends Animal{
	public BigDog() {}
	public void makeNoise() {
		System.out.println("왕왕");
	}

}

.

.

.

그러면 이제 테스트를 해보자.

.

.

package Animal;

public class TestAnimal {

	public static void main(String[] args) {
		Cat cat1 = new Cat();
		cat1.makeNoise();
		Dog dog1 = new Dog();
		dog1.makeNoise();
		BigDog bigDog = new BigDog();
		bigDog.makeNoise();
		
        // Upcast
		Animal animal1 = new Cat();
		animal1.makeNoise();
		Animal animal2 = new Dog();
		animal2.makeNoise();
		Animal animal3 = new BigDog();
		animal3.makeNoise();
		Animal animal4 = new Animal();
		animal4.makeNoise();
		
        // Downcast
		Cat cat2 = (Cat)animal1;
		Dog dog2 = (Dog)animal2;
		Dog dog3 = (Dog)animal2;
		BigDog bigDog2 = (BigDog)animal3;
		cat2.makeNoise();
		dog2.makeNoise();
		dog3.makeNoise();
		bigDog2.makeNoise();
		
	}

}

.

.

.

.

<Upcast>

상위클래스에 하위클래스 객체를 사용함으로써 하위클래스 메소드를 사용할 수 있다.

하위 클래스에서는 상위클래스 메소드를 오버라이딩해서 사용 가능하다.

이렇게 선언하면 하위클래스에서 오버라이딩한 메소드가 실행된다.

 

<Downcast>

하위클래스로 선언한 것을 상위클래스 객체로 생성할 수 없다.

하지만 상위클래스 인스턴스가 하위클래스 객체로 선언된다면 상위클래스를 하위클래스로 형변환 할 수 있다.

.

.

(선언 방법 짚고 가자)

상위클래스 인스턴스 = new 하위클래스객체;

.

.

ex) Animal animal1 = new Cat();

Cat cat2 = (Cat)animal1;

 

 

728x90
반응형