기본 코드
class 길동 {
void start(){
System.out.println("심문을 시작하시오");
}
}
class 영희 {
void start(){
System.out.println("죄인은 응답하시오");
}
}
class Game {
void init(길동 gi, 영희 yo){
gi.start();
yo.start();
}
}
public class StarApp1 {
public static void main(String[] args) {
// 1. 의존적인 것들 생성하기
길동 gi = new 길동();
영희 yo = new 영희();
// 2. 게임 실행
Game game = new Game();
game.init(gi, yo);
}
}
적용 코드
abstract class 재판관 {
// 추상화(abstract): 필요부분만 노출. 구현이 아닌 사용 방법 재정의
abstract void start(); // 추상 메서드
}
// is 관계(이다)
class 코스2 extends 재판관 {
void start() {
System.out.println("심문을 시작하시오");
}
}
class 영희2 {
void start() {
System.out.println("죄인은 응답하시오");
}
}
class Game2 {
void init(재판관 gi, 영희2 yo) {
gi.start();
yo.start();
}
}
public class StarApp2 {
public static void main(String[] args) {
영희2 yo = new 영희2(); // 영희2(start)
재판관 cos = new 코스2(); // 코스2(start - 재정의) + 재판관(start - 무효화)
// 재정의(Overriding): 상속받은 메서드를 자식이 가져가며 부모 메서드 무효화된 상황
// 메서드 이름, 매개변수, 반환 타입이 부모 클래스와 동일해야 가능
// 오버라이드: 무효화
// 동적 바인딩: 오버라이딩을 통해 작동
// 부모 클래스에 참조된 객체가 실제 자식 클레스 객체일 때,
// 자식 클래스에 재정의된 메서드를 호출하는 방식
Game2 game2 = new Game2();
game2.init(cos, yo); // 동적 바인딩
}
}
Share article