[JAVA] 동적바인딩과 추상화

gov's avatar
Nov 12, 2024
[JAVA] 동적바인딩과 추상화
기본 코드
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

goho