44. 자바 ( 동적바인딩 )

jhnada·2022년 8월 3일
0

동적바인딩 및 오버라이드 정리

  • 부모와 자식이 동일한 메소드를 들고 있다.
    • 메소드를 들고있는 것 자체 ( 이건 오버라이드라고 하지 않는다. )

  • 하지만 동일한 메소드를 들고 있으면 오버라이드 발생
    • 부모의 메소드를 무효화 ( 오버라이드 ) 시킨다.
    • 무효화하면 코드는 남아있지만 실행 X
  • 오버라이드 : 무효화시킨다.
  • 재정의 : 부모의 메소드를 자식이 들고 있고 데이터를 수정하는 것.
  • 동적바인딩 : 부모의 메소드가 무효화되어 자식의 메소드를 찾으러 가는 행위 ( 부모에서부터 자식으로 [ 위에서 아래로 ] )
class Animal{
} 
class 하나{
}
class Dog extends Animal 하나{
}	
  • 상속은 하나만 가능하다.
class 동물{// 부모1 자식2
}
class 강아지 extends 동물{  
}
class 고양이 extends 동물{		
}
  • 다형성이 성립하면 상속할 수 있다.
  • 부모가 둘이 될 수는 없지만, 부모 밑에 자식 여러 명은 가능하다.
class 동물{		// 부모1 자식2
	void sound() {		// 부모의 메소드가 오버라이딩 된다
		System.out.println("동물소리");
	}
}
class 강아지 extends 동물{  	//	자식이 재정의
	void sound() {
		System.out.println("강아지소리");
	}
}
class 고양이 extends 동물{		
	void sound() {
		System.out.println("고양이소리");
}


public class Extends03 {

	public static void main(String[] args) {
		강아지 u1 = new 강아지();		// 포인터 → 강아지 / 강아지, 동물
		u2.sound();			            // 강아지소리 출력
		
		동물 u2 = new 강아지();		// 포인터 → 동물 / 강아지, 동물
		u2.sound();			          // 강아지소리 출력
													// 자식이 재정의, 부모 무효화 → 자식 출력
	}
}
  • 자식 ( 강아지, 고양이 )
    • 자식이 부모의 메서드를 재 정의
    • 부모의 메서드가 오버라이딩 ( 초기화 ) 된다.


class 동물{		// 부모1 자식2
	void sound() {		// 부모의 메소드가 오버라이딩 된다
		System.out.println("동물소리");
	}
}
class 강아지 extends 동물{  	//	자식이 재정의
	void sound() {
		System.out.println("강아지소리");
	}
}
class 고양이 extends 동물{		

}


public class Extends03 {

	public static void main(String[] args) {
		동물 u1 = new 강아지();		
		u1.sound();						      // 강아지소리

		동물 u2 = new 고양이();		// 고양이가 재정의X
		u2.sound();						    // 동물소리
	
	}
}
  • 자식 ( 고양이 )이 재정의를 하지 않음.
    • 부모 ( 동물 ) 의 메서드가 초기화 되지 않고 그대로 출력
    • 결과값 : 동물소리
profile
밑바닥부터 배우는 초짜 개발자

0개의 댓글