[ 오버로딩 ]
함수명 중복정의 허용
상속 X
메서드 시그니쳐 X
[ 오버라이딩 ]
메서드 재정의
상속 O
메서드 시그니쳐 O
package class06;
class Poketmon {
String type;
String name;
Poketmon(String type, String name) {
this.type = type;
this.name = name;
}
void hello() {
System.out.println("본인이름을 외칩니다");
}
void attack() {
System.out.println("타입에 맞는 공격을 합니다");
}
}
class Water extends Poketmon {
Water(String name){
super("물", name);
}
@Override
void attack() {
System.out.println("물대포~~!!");
}
}
class Squirtle extends Water {
Squirtle() {
super("꼬북이");
}
@Override
void hello() {
System.out.println("꼬북꼬북");
}
}
class Gorapaduck extends Water {
Gorapaduck(){
super("고라파덕");
}
@Override
void hello() {
System.out.println("파덕파덕");
}
}
class Fire extends Poketmon {
Fire(String name){
super("불", name);
}
@Override
void attack() {
System.out.println("불꽃~~!!");
}
}
// 파이리
class Charmander extends Fire {
Charmander() {
super("파이리");
}
@Override
void hello() {
System.out.println("리리");
}
}
// 리자몽
class Charizard extends Fire {
Charizard(){
super("리자몽");
}
@Override
void hello() {
System.out.println("몽몽~");
}
}
public class Test01 {
public static void main(String[] args) {
Poketmon[] datas = new Poketmon[3];
int index = 0;
datas[index++] = new Squirtle();
datas[index++] = new Charmander();
datas[0].attack(); // 포켓몬아, 공격해!
datas[0].hello(); // 포켓몬아, 인사해!
// 디형성
// : 실제로 존재하는 객체가 무엇인지에 따라
// 같은 메서드를 호출하더라도 다른 기능이 수행되는 현상
// 동적바인딩
// : 부모의 변수 안에 구현되어 있는 객체가 자식인 상황
// 이때 오버라이딩 된 메서드 호출시, 실제 객체의 메서드가 수행되는 현상
// 동적바인딩 덕분에 다형성이 실현됩니다.
datas[1].attack();
datas[1].hello();
}
}

[ 다형성]
실제로 존재하는 객체가 무엇인지에 따라
같은 메서드를 호출하더라도 다른 기능이 수행되는 현상
[ 동적바인딩 ]
부모의 변수 안에 구현되어 있는 객체가 자식인 상황
이때 오버라이딩 된 메서드 호출시, 실제 객체의 메서드가 수행되는 현상
동적바인딩 덕분에 다형성이 실현됩니다
자바 가상 머신(JVM)은 시행단계에서 객체의 타입을 보고 적절한 메소드를 호출하게 된다
이것을 동적 바인딩이라고 한다
'🍏 개발일기' 카테고리의 다른 글
| 프레임워크 | Set | Map (0) | 2025.10.22 |
|---|---|
| 모동숲으로 implement/interface 이해하기 (0) | 2025.10.22 |
| 상속 | super() | 부모클래스 | 자식클래스 (0) | 2025.10.20 |
| 클래스 | 공유자원 (0) | 2025.10.17 |
| 학생부 프로그램 (0) | 2025.10.15 |