태그

#JAVA

JAVA - polymorphism

2021년 6월 15일 00:27

50-thumbnail-image

다형성

  • 다양한 형태나 성질
  • 하나의 부모로부터 상속받은 클래스들은 모두 형태나 성질이 다르기 때문에 하나의 객체를 여러 개의 클래스로 표현하는 것
  • 클래스를 기능별로 구분하여 긴으에 대한 통합적인 처리를 위해서 사용한다
  • 다중 상속을 통하여 여러 개의 클래스들으르 상속받아 기능별로 통합적으로 처리한다

타입 불일치형 = 업캐스팅 = 다형성

업캐스팅 (up casting)

  • 부모 참조형 변수에 자식 인스턴스 공간의 정보를 담는 것 (자식 -> 부모로 캐스팅)
  • 부모 클래스의 메소드르르 사용할 수 있다
  • 부모 클래스에 있는 메소드를 오버라이드 한 메소드를 사용할 수 있다
  • 자식 클래스에만 있는 메소드는 부모 클래스가 사용할 수 없다

다운 캐스팅 (down casting) : 부모 -> 자식으로 캐스팅

ex)

class Maind

public class Main {
	public static void main(String[] args) {

		Dog d = new Dog("사모예드");
	
		d.disp(); // 이름 : 사모예드
		d.bark(); // 멍 멍 멍멍 ㅁ어멍
		d.eat(); // 뼈다귀
	
		Animal a = new Dog("사모예드");
		a.disp(); //부모의 고유한 메소드 0
		a.bark(); //자식에서 오버라이드된 메소드 0
		// a.eat(); // eat X
	
	    // 다운 캐스팅
	    if (animal2 instanceof Dog) {
			Dog dog = (Dog) animal2;
			dog.cry();
			dog.eat();
			dog.lash();
		} else if(animal2 instanceof Cat) {
			Cat cat = (Cat) animal;
			cat.cry();
			cat.eat();
			cat.grooming();
		}
	}
}

class Dog

public class Dog extends Animal{
	@Override
	public void cry() {
		System.out.println("멍 멍 멍멍 ㅁ어멍");
	}
	
	public void lash() {
		System.out.println("꼬리 흔드릏늗ㄹ");
	}
	
	public void eat() {
		System.out.println("뼈다귀");
	}
}

class Cat

public class Cat extends Animal{
	@Override
	public void cry() {
		System.out.println("미야아아아오오옹");
	}
	
	public void grooming() {
		System.out.println("그릉 그ㅡㄹㅇ그르응");
	}
	
	public void eat() {
		System.out.println("생선");
	}
}

class Animal

public class Animal {
	private String name;

	public Animal(String name) {
		this.name = name;
	}
	
	public void disp() {
		System.out.println("이름 : "+name);
	}
	
	public void bark() {
		System.out.println("??????????????");
	}
}