Java

Java 문법(10) - 다형성

sangchu 2022. 2. 8. 12:42

다형성

  • 객체가 다양한 형태로 표현될 수 있다는 개념 → 부모 클래스를 활용하여 자식의 객체를 제어할 수 있다

상속과 다형성

  • 다형성은 상속 관계에 있는 클래스간에만 사용 가능
  • 클래스에서 다형성을 사용할 때 부모 클래스의 객체를 사용하되, 실제 메모리에 담기는 내용은 자식 클래스의 내용을 담음
public class Main {
	public static void main(String[] args) {
		
		//Animal animal = new Animal("동물"); 불가능합니다.
		
		Lion lion = new Lion("사자");
		lion.Growl();
		
		Cat cat = new Cat("고양이");
		cat.Growl();
	}
}

abstract class Animal {
	
	String Name;
	
	public Animal(String name) {
		Name = name;
	}
	
	abstract public void Growl(); 
}

class Lion extends Animal {

	public Lion(String name) {
		super(name);
	}

	public void Growl() {		
		System.out.println("어흥");
	}
}

class Cat extends Animal {
	public Cat(String name) {
		super(name);
	}
	
	public void Growl() {		
		System.out.println("야옹");
	}
}
  • 위 코드는 앞서 상속 파트에서 다룬 코드
public class Main {
	public static void main(String[] args) {
		
		Animal animal_lion = new Lion("사자");
		animal_lion.Growl();
		
		Animal animal_cat = new Cat("고양이");
		animal_cat.Growl();
		//animal_cat.Udada(); 불가능합니다.
	}
}

abstract class Animal {
	
	String Name;
	
	public Animal(String name) {
		Name = name;
	}
	
	abstract public void Growl(); 
}

class Lion extends Animal {

	public Lion(String name) {
		super(name);
	}

	public void Growl() {		
		System.out.println("어흥");
	}
}

class Cat extends Animal {
	public Cat(String name) {
		super(name);
	}
	
	public void Growl() {		
		System.out.println("야옹");
	}
	
	public void Udada() {
		System.out.println("UDADADA");
	}
}
  • 4번째, 7번째 줄: 다형성을 사용하고 있음. animal_lion과 animal_cat의 자료형은 Animal 클래스지만 4번째 줄에서 객체를 초기화할 때 Lion 클래스를, 7번째 줄에서는 Cat 클래스를 사용
  1. 객체 껍데기는 Animal 클래스를 사용했지만 실제 객체에 저장되는 데이터는 Animal로부터 상속받은 Lion과 Cat 클래스 데이터
  2. 9번째 줄 주석: 데이터는 각각의 자식 클래스에 저장되지만 틀은 Animal 클래스기 때문에 animal_cat.Udada() 사용 불가능 → Animal 클래스에는 존재하지 않는 메소드

 

 

 

 

 

 

바로 실행해보면서 배우는 java'를 학습하며 정리한 문서