자바

오버라이딩. 다형성

chantleman 2024. 7. 23. 10:58

<Animal.java> - 최상위 클래스

public class Animal {

	public void cry() {
		
	}
	public void sing() {
		
	}
}

 

 

 

<Cat.java> - Animal 클래스를 상속받음

public class Cat extends Animal{
	
	@Override
	public void cry() {
		System.out.println("야옹~");
	}
}

 

 


<Dog.java> - Animal 클래스를 상속받음

public class Dog extends Animal{

	@Override
	public void cry() {
		System.out.println("멍멍!");
	}
}

 


 

<main.java>

import kr.or.ddit.util.ScanUtil;

public class AniMain {
	public static void main(String[] args) {
		
		System.out.println("1.고양이");
		System.out.println("2. 강아지");
		int sel = ScanUtil.nextInt("선택: ");
	
		if(sel == 1)
		{
			Cat cat = new Cat(); 
			cat.cry();
		}
		if(sel ==2)
		{
			Dog dog = new Dog();
			dog.cry();

		}			
	}
}

이런 식으로 해도 되지만,

만약 알고리즘이 복잡해지게 되면 중복되는 코드가 너무 많아지기때문에 

다형성을 이용하여 사용하는 것이 가장 좋습니다.

 

 


- 다형성 이용해서 하는 방법

 

import kr.or.ddit.util.ScanUtil;

public class AniMain {
	public static void main(String[] args) {
		
		System.out.println("1.고양이");
		System.out.println("2. 강아지");
		int sel = ScanUtil.nextInt("선택: ");
	
		Animal ani= null;
		if(sel == 1)
		{
			ani = new Cat(); 
		}
		if(sel ==2)
		{		
			ani = new Dog();
		}
		ani.cry(); 
	}
}

만약 1을 선택하면 ani에 cat이 들어가고, 2를 선택하면 ani에 dog가 들어갑니다.

이런 것을 다형성이라고 하는데, 

다형성은 기본적으로 오버라이딩을 해줘야합니다.

 

위 예제코드처럼 부모 클래스에 자식 클래스를 담을 때는 타입이 자동으로 변환되지만,

부모 클래스에 자식클래스를 담을 때는 아래와같이 강제로 형변환해줘야합니다.

Cat cat = (Cat)ani;

'자바' 카테고리의 다른 글

인터페이스  (2) 2024.07.24
추상 클래스  (0) 2024.07.23
ValueObject  (0) 2024.07.22
lombok.jar  (0) 2024.07.22
싱글톤  (1) 2024.07.19