10.4 14-4 상속관계비교
여기선 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(); 임포트 해줘서 접근
}
} 한 개만 가능합니다 쟌쟌!!