다형성(polymorphism)
- 객체들의 타입이 다르면 똑같은 메시지가 전될되더라도 서로 다른 동작을 하는 것
- 강아지의 speak()메서드에서는 "멍멍"이라고 동작하고, 고양이의 speak()메서드에서는 "야옹"이라고 동작하도록 구현하는 것
상향 형번환(UP-Casting)
- 부모타입의 참조변수로 자식타입의 객체를 다룰 수 있는 것
- 서로 상속관계에 있는 타입간의 형변환만 가능하다.
- 자식 타입에서 부모타입으로 형변환하는 경우에는 형변환 생략가능하다.
상향 형변환이 가능한 이유
- 자식클래스 객체는 부모클래스 객체를 포함하고 있기 때문이다.
<형변환 사용하는 이유>
<형변환 사용한 경우>
객체의 타입을 알아내는 방법
Shape s=getShape(); //참조변수 s가 가리키는 객체의 실제 타입은? Shape일수도 있지만 Rectangle일수도 있고 Circle일수도 있다.
if ( s instanceof Rectangle ) {
System.out.println("Rectangle이 생성되었습니다.");
}
else {
System.out.println("Rectangle이 아닌 다른 객체가 생성되었습니다.");
}
다형성의 이용
메서드의 매개변수로 부모클래스의 참조변수를 이용한다.
-> 다형성을 이용하는 전형적인 방법
제어자 조합할 때 주의사항
메서드에 static과 abstract를 함께 사용할 수 없다.
-> static메서드는 몸통(구현부)이 있는 메서드에만 사용할 수 있기 때문이다.
클래스에 abstract와 final을 동시에 사용할 수 없다.
-> 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다.
abstract메서드의 접근제어자가 private일 수 없다.
-> abstract메서드는 자손클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손 클래스에서 접근할 수 없기 때문이다.
메서드에 private와 final을 같이 사용할 필요는 없다.
-> 접근 제어자가 final인 메서드는 오버라이딩될 수 없기 때문이다.
'Web Programming > java-jsp' 카테고리의 다른 글
java 동기화, synchronized, wait()-notify() 메서드 (0) | 2018.08.29 |
---|---|
java 스레드, Runnable 인터페이스, 싱글스레드, 멀티스레드, join메서드, sleep메서드 (0) | 2018.08.29 |
java 인터페이스, 추상클래스, 다중상속 (0) | 2018.08.29 |
java 상속, 단일상속, 오버라이딩, 오버로딩, super, Object클래스, Object메서드 (0) | 2018.08.29 |
java 제어자, static, final, 접근제어자 (0) | 2018.08.29 |