써치킴의 우당탕탕 개발 블로그

[Java][Ch2] 메서드동적바인딩 본문

더 자세하게 Java

[Java][Ch2] 메서드동적바인딩

써치킴 2022. 5. 13. 02:05

참조변수가 부모형일때, 부모클래스에 정의되지 않은 자식클래스의 함수는 가시영역 밖이다 -> 사용 불가하다.  

AA.java

public class AA {
     public void f1(){
          System.out.println("1번 함수 : 부모(AA) 클래스의 f1");
     }
     public void f2(){
          System.out.println("2번 함수 : 부모(AA) 클래스의 f2");
          f3();              // 오버라이드되어 BB클래스- f3()함수 호출 (8번 호출)
     }
     public void f3(){
          System.out.println("3번 함수 : 부모(AA) 클래스의 f3");
     }
     public void f4(){
          System.out.println("4번 함수 : 부모(AA) 클래스의 f4");
          f5();
     }
     public void f5(){
          System.out.println("5번 함수 : 부모(AA) 클래스의 f5");
     }
}

BB.java

public class BB extends AA{
     @Override
     public void f3(){
          System.out.println("8번 함수 : 자식(BB) 클래스의 f3");
     }
     @Override
     public void f4(){
          System.out.println("9번 함수 : 자식(BB) 클래스의 f4");
     }
     public void f6(){
          System.out.println("11번 함수 : 자식(BB) 클래스의 f6");
          f1();
     }
     public void f7(){
          System.out.println("12번 함수 : 자식(BB) 클래스의 f7");
          f2();
     }
}

MainEx.java

public class MainEx {
     public static void main(String[] args) {
          AA ab = new BB();
          ab.f1();
          ab.f2();
          ab.f3();
          ab.f4();
          ab.f5();
//        ab.f6();           // 참조변수가 부모형이라 부모 클래스에 정의되어 있지 않는 함수는 가시영역 밖이다. -> 사용 불가하다.
//        ab.f7();           // 해당 함수 부모 클래스에 정의 후 오버라이드 하면 ab에서 사용 가능함
          
          if(ab instanceof BB){        // ab가 BB 자료형으로 형변환 할 수 있는지 물어보는것
              ((BB)ab).f6();     
              ((BB)ab).f7();
          }
          
//        ((BB)ab).f6();     // 강제형변환
//        ((BB)ab).f7();
          
          System.out.println(ab instanceof BB);      // ab 객체가 BB자료형에 포함되니?
                                                               // 데이터타입 형변환이 필요할때 확인하는 함수
     }
}

'더 자세하게 Java' 카테고리의 다른 글

[Java][Ch2] 인터페이스  (0) 2022.05.13
[Java][Ch2] 추상화(abstract)  (0) 2022.05.13
[Java][Ch2] is-a 상속  (0) 2022.05.13
[Java][Ch2] has-a 상속  (0) 2022.05.13
[Java][Ch2] 캡슐화  (0) 2022.05.13
Comments