(JAVA) 다형성
다형성
여러 개의 형태(자료형)를 갖는다는 의미, 객체지향 프로그래밍의 3대 특징 중 하나다.
상속을 이용한 기술로, 자식 객체를 부모객체의 타입의 변수로 다룰 수 있는 기술
부모는 자식을 품을 수 있지만 자식은 부모를 품지않는다고 생각하면 쉽다.
부모는 자식 클래스의 자료형을 다 수용할 수 있으며, 여러가지의 자식 자료형을 포함하고 있다가
필요한 시점에 맞춰서 자료형을 바꿔 사용을 하는 기술이다.
ex) Person - 부모클래스
Employee, Professor - 자식클래스
Person p = new Person();
일땐 Person의 메소드와 변수 사용가능
Person p2 = new Student();
Person p3 = new Employee(); or p = new Employee();
평소에는 Person형으로 있는 Student와 Employee의 메소드와 변수들은 보이지 않는다.
그래서 이러한 값을 사용하기 위해서는 형변환 후 사용 가능
((Student)p).setName(); 형식으로 전체를 형변환 해주고 나면 접근 가능하다.
동적바인딩
Product의 toString(메소드)을 Employee에서도 오버라이딩으로 toString(메소드)하면
p = new Employee();를 하고 System.out.print(p)를 하면 Employee의 toString이 출력이 된다.
이를 자동으로 해주는게 동적바인딩이다. 최신으로 넣어준 클래스의 메소드를 출력한다.
instanceof
현재 참조형 변수가 어떤 클래스 형의 객체 주소를 참조하고 있는지 확인할 때 사용, 클래스 타입이 맞으면 true, 아니면 false값을 반환
표현식)
if(레퍼런스 instanceof 클래스명)
if(p instanceof Student)
System.out.println("Student가 있다!!");
이런식으로 참 거짓을 판별 가능
배열로 다형성 구성하기
Car[] carr = new Car[5]; //Car부모 클래스
carr[0]=new Sonata();
carr[1]=new Avante();
carr[2]=new Spark();
carr[3]=new Morning();
이런식으로 다양한 클래스는 넣을 수 있다.
간단하게 정의해서 다형성이란 하나의 부모클래스에 다른 여러 자식클래스(자료형)를 집어 넣고 하나의 클래스에서
여러가지 데이터형태를 관리하는 것. 카멜레온처럼 그때그때 모습이 바꾸어 사용한다. 이것으로 코드 수를
엄청나게 절약가능함!!