학원/DB(오라클),SQL문

10.4 14-4 상속관계비교

도원결의 2022. 10. 4. 18:50

여기선 class 5개를 비교해 보겠음

첫번째는 부모클래스

두번째는 부모클래스를 상속받은 자식클래스

세번째는 아무런 관계도 없는 일반 클래스

네번째는 다른패키지에 상속받은 클래스

다섯번째는 다른패키지에 관계없는 일반클래스

privat / package / protect / public 을 어디서 어떻게 사용할 수 있는지 확인 할 것임

 

1. public class Super {         ==== 부모클래스


  [멤버메소드]
private void privatedMethod() {}
void packageMethod() {}
protected void protectedMethod() {}
public void publicMethod() {}

void call() {
         privatedMethod();
         packageMethod();
         protectedMethod();
         publicMethod();
}       

              }                            다들 잘 실행 됨

 

2. public class Normal extends Super {    ====== Super를 상속받은 자식클래스


void access( ) {
this.privateMethod();    private은 자기의class 안에서만 사용 할 수 있음
this.packageMethod();     같은 패키지라 가능
this.protectedMethod();    같은 패키지라 가능하고 상속받아서 다른패키지라도 가능
this.publicMethod();          당근가능
     }

     } private 빼고 다 가능

 

 

3. public class General {    ====    super와 상속관계 없는 클래스 

 

void access() {
       Super sup = new Super();
        sup.packageMethod();
        sup.protectedMethod();
        sup.publicMethod();
        }

   } 아... 같은 패키지라서... 가능하네... 근데 호출하는 방법이 다름!! 상속받으면 this. 로 아니면 걍 다른클래스호출하는 것 처럼!!!

 

4.   package accessmodifier07.sub;     ====== 패키지 다름!!! 하지만 상속관계 O

import accessmodifier07.Super;
public class Normal extends Super {
void access() {
       this.privateMethod();             얜 당근 안보이
       this.packageMethod();          패키지달라서 접근안됨
       this.protectedMethod();     패키지 다르지만 상속관계라서 접근이 가능합니당
       this.publicMethod();           위에 임포트 하면 접근 가능
                      }

              } 두개가 가능하네요

 

5.package accessmodifier07.sub;    =======  다른패키지 아무연고 없는 클래스
import accessmodifier07.Super;
public class General {

 

void access() {
         Super sup = new Super();
          sup.packageMethod();   다른패키지라 안보이고 
          sup.protectedMethod();    상속관계가 없으면 안보임 
          sup.publicMethod();      임포트 해줘서 접근
                      }

             } 한 개만 가능합니다  쟌쟌!!