객체 지향 프로그래밍의 특징에는 추상화, 상속, 다형성, 캡슐화가 있다.
그 중 객체 지향 프로그래밍의 꽃이라고 할 수 있는 다형성에 대해 한번 정리하고 가려한다.
다형성이란 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가실 수 있는 성질을 의미한다.
설명보다는 코드로 한번 보는게 훨씬 이해가 빨라진다.
class Animal {
public void makeSound() {
System.out.println("The animal makes a sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("The dog barks");
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("The cat meows");
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDog = new Dog();
Animal myCat = new Cat();
myAnimal.makeSound();
myDog.makeSound();
myCat.makeSound();
}
}
위 코드를 보면 Animal 부모 클래스가 있고
자식 클래스인 Dog 클래스와 Cat 클래스가 Animal 클래스를 상속받고 있다.
김영한님의 강의를 듣다보면 나오는 문장이 '부모는 자식을 담을 수 있다'
이것이 다형성이다.
main 메소드 안을 보면 Animal 부모 클래스 자료형이 Dog 객체와 Cat 객체를 담고 있는 것을 볼 수 있다.
그리고 해당 객체들의 메소드를 호출한 결과이다.
The animal makes a sound
The dog barks
The cat meows
자식 클래스에서는 오버라이딩 된 메소드가 호출된 것을 볼 수 있다.
다음은 오버라이딩 되지 않은 자식 클래스만이 가지고 있는 메소드의 호출 예이다.
class Animal {
public void makeSound() {
System.out.println("The animal makes a sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("The dog barks");
}
public void walk() {
System.out.println("the dog walks");
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Animal myDog = new Dog();
((Dog) myDog).walk();
}
}
다형성으로 Animal 부모 클래스가 Dog 자식 클래스를 담고 있다.
그리고 Dog 클래스의 walk() 메소드를 호출하기 위해서는 위와 같이 명시적 형변환이 필요하다.
'Language > Java' 카테고리의 다른 글
Java access modifiers (0) | 2023.05.24 |
---|---|
Super (0) | 2023.05.11 |
스트림 (0) | 2023.03.08 |
Optional 클래스 (0) | 2023.03.07 |
메소드 참조 (0) | 2023.03.06 |