상속과 protected 접근 지정자
슈퍼 클레스에 대한 접근 지정
| 슈퍼 클래스 멤버에 접근하는 래스 종류 |
슈퍼 클래스 멤버의 접근 지정자 | |||
| private | 디폴트 | protected | public | |
| 같은 패키지에 있는 클래스 | X | O | O | O |
| 다른 패키지에 있는 클래스 | X | X | X | O |
| 같은 패키지에 있는 서브 클래스 | X | O | O | O |
| 다른 패키지에 있는 서브 클래스 | X | X | O | O |
슈퍼 클래스의 private 멤버
슈퍼 클래스의 멤버가 private으로 선언되면, 서브 클래스를 포함하여 다른 어떤 클래스에서도 접근할 수 없습니다.
private은 오직 '현재 클래스의 멤버들에게만 접근을 허용한다'라는 뜻입니다.
슈퍼 클래스의 디폴트 멤버
슈퍼 클래스의 멤버가 디폴트로 선언되면, 패키지에 있는 모든 클래스가 접근 가능합니다.
서브 클래스라도 다른 패키지에 있다면, 슈퍼 클래스의 디폴트 멤버는 접근할 수 없습니다.
슈퍼 클래스의 public 멤버
슈퍼 클래스의 멤버가 public으로 선언되면, 같은 패키지에 있든 다른 패키지에 있든 모든 클래스에서 접근할 수 있습니다.
슈퍼 클래스의 protected 멤버
protected 멤버에 대해서는 자세히 설명해 봅시다. 슈퍼 클래스의 protected 멤버는 다음 두 가지 경우에 접근을 적용합니다.
- 같은 패키지에 속한 모든 클래스들
- 같은 패키지든 다른 패키지든 상속받는 서브 클래스

상속 관계에 있는 클래스 간 멤버 접근
class Person {
private int weight; // private 접근 지정. Student 클래스에서 접근 불가
int age; // 디폴트 접근 지정
protected int height; // procted 접근 지정. Student 클래스에서 접근 가능
public String name; // public 접근 지정. Student 클래스에서 접근 가능
public void setWeight(int weight) {
this.weight = weight;
}
public int getWeight() {
return weight;
}
}
class Student extends Person {
public void set() {
age = 30; // 슈퍼 클래스의 디폴트 멤버 접근 가능
name = "홍길동"; // 슈퍼 클래스의 public 멤버 접근 가능
height = 170; // 슈퍼 클래스의 procted 멤버 점근 가능
// weight = 99; // 오류 슈퍼 클래스의 private 멤버 접근 가능
setWeight(98); // private 멤버는 weight은 setWeight()으로 간접 접근
}
}
public class InheritanceEx {
public static void main(String[] args) {
Student s = new Student();
s.set();
}
}
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| 업캐스팅과 instanceof 연산자 (0) | 2025.02.09 |
|---|---|
| 상속과 생성자 (0) | 2025.02.08 |
| 클래스 상속과 객체 (1) | 2025.02.06 |
| 상속 (0) | 2025.02.06 |
| final (0) | 2025.02.05 |