예제
class Person{
void eat() {
System.out.println("부모 클래스 eat : 먹는 중..");
}
}
class Student extends Person{
void study() {
System.out.println("자식 클래스 정의 : 공부 중..");
}
void eat() {
System.out.println("재정의된 자식 클래스 eat : 폭식 중..");
}
void eatSuper() {
super.eat();
}
}
public class Oop_polymorphism02{
public static void main(String[] args) {
Student s1 = new Student();
System.out.println("=== Student s1 = new Student(); ===");
s1.eat();
s1.study();
System.out.println();
//자식 클래스에서 오버라이딩된 부모 클래스의 원본 메서드를 호출
System.out.println("[Super 사용]");
s1.eatSuper();
System.out.println();
//다형성 사용
Person s2 = new Student();
System.out.println("=== Person s2 = new Student(); ===");
s2.eat(); // 가능
System.out.println();
// s2.study(); // 불가능, 컴파일 에러
System.out.println("[Casting 사용]");
((Student)s2).study();
}
}
=== Student s1 = new Student(); ===
재정의된 자식 클래스 eat : 폭식 중..
자식 클래스 정의 : 공부 중..
[Super 사용]
부모 클래스 eat : 먹는 중..
=== Person s2 = new Student(); ===
재정의된 자식 클래스 eat : 폭식 중..
[Casting 사용]
자식 클래스 정의 : 공부 중..
이 예제에서 다루는 주요 주제는 다음과 같다.
Method Overriding
Student 클래스에서 Person 클래스의 "eat() 메서드"를 오버라이드 한다. 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 의미한다.
Super Keyword
eatSuper() 메서드에서 "super.eat()"를 호출하면 부모 클래스의 "eat() 메서드"가 호출된다. super키워드는 부모 클래스의 멤버(메서드 또는 변수)에 접근할 수 있게 한다.
Polymorphism
다형성은 객체 지향 프로그래밍의 핵심 원칙 중 하나로, Person s2 = new Student(); 코드에서 다형성을 볼 수 있다. 이는 부모 클래스 타입의 참조 변수로 자식 클래스의 인스턴스를 참조할 수 있음을 보여주지만, 이 경우에는 부모 클래스에 정의된 메서드만 호출할 수 있다.
Casting
Person 타입의 변수 s2를 Student 타입으로 캐스팅하면 Student 클래스의 메서드를 호출할 수 있게된다.
Super, Casting 요소
- Super 키워드 : super는 상속관계의 부모 클래스로의 참조를 제공한다. 이를 사용하면 부모 클래스의 메서드나 필드에 접근할 수 있다. "super" 는 자식클래스에서 부모 클래스의 오버라이드된 메서드를 호출하거나, 부모 클래스의 생성자를 호출하는데 사용된다.
- casting(형변환) : java에서 casting을 사용하면 하나의 타입을 다른 타입으로 변환할 수 있다. 상속 관계에 있는 클래스 간의 변환에서는, 부모 클래스 타입의 변수를 자식 클래스 타입으로 변환할 수 있다. 이를 통해 자식 클래스가 가지고 있는 고유의 메서드나 필드에 접근할 수 있게된다. 이런 방식은 다형성을 실현하거나 특정 타입의 객체만을 처리하는 메서드에 다양한 타입의 객체를 전달할 필요가 있을 때 사용된다.
'Java > JAVA 100 문제 풀이' 카테고리의 다른 글
자바 part.4 문제풀이 - 다형성과 추상 클래스를 이용한 객체 배열 생성과 활용 (0) | 2023.07.27 |
---|---|
자바 part.4 문제풀이 - 추상 클래스를 이용한 다형성 구현 (0) | 2023.07.27 |
자바 part.4 문제풀이 - 자바의 다형성(polymorphism) (0) | 2023.07.27 |
자바 part.4 문제풀이 - 인터페이스와 상속 활용하기 (0) | 2023.07.26 |
자바 part.4 문제풀이 - 다중 상속을 가능하게 하는 인터페이스(Interface) (0) | 2023.07.26 |