접근제어자 질문
296
작성한 질문수 3
안녕하세요, 강의 잘 보고 있습니다.
접근제어자 강의 수강 중인데, public, private, default 관련 사용법 알려주셔서 protected는 스스로 만들어보고 테스트 해봤습니다.
그런데, protected는 다른 패키지여도 자식클래스는 접근이 가능하다는데, 어떻게 사용해야하는건지, 왜 main에서 오류가 나는지 모르겠습니다..
package access.b;
import access.a.AccessData;
public class AccessMain extends AccessData {
public static void main(String[] args) {
AccessData data = new AccessData();
// 이렇게 하면 안되는 이유
data.protectedField = 5;
data.protectedMethod();
}
}이렇게 했을 때 오류가 나고,
package access.b;
import access.a.AccessData;
public class AccessMain extends AccessData {
public static void main(String[] args) {
Test test = new Test();
test.ts();
}
}
class Test extends AccessData {
void ts(){
protectedField = 3;
System.out.println("protected test 호출입니다.");
protectedMethod();
}
}이런 식으로 접근하면 또 접근이 가능했습니다..
왜 그런건지, 어떤 경우에 이런식으로 쓰는건지, main에서는 왜 안되는건지 궁금합니다..
답변 1
0
AccessData data = new AccessData(); 부분을
AccessMain data = new AccessMain(); 으로 바꾸면
접근이 가능할 것 같습니다.
이유는 protected 접근제어자의 경우 자식클래스에서 접근이 가능한데, 추가적으로 접근하는클래스(AccessMain)가 "하위클래스의 인스턴스"를 이용해 접근을 해야한다는 것입니다.
전자의 경우 AccessMain이 AccessData의 자식클래스이지만, "하위클래스의 인스턴스"를 이용해 접근을 하지않고 부모 인스턴스를 이용해 접근하였기때문에 에러가 발생합니다.
후자의 경우 AccessMain이 AccessData의 자식클래스이며, "하위클래스의 인스턴스"를 이용해 접근을 하였기때문에 protected 접근제어자의 조건을 만족하므로 가능하게 됩니다.
완벽하지는 않으니 참고만 해주시면 감사하겠습니다!😉
질문있습니다
0
30
1
1번 문제 질문입니다.
0
35
1
음악플레이어 문제 중 코드질문
0
28
1
9장 상속 문제와 풀이 질문
0
38
1
강의 자료에 사소한 오타가 있습니다.
0
50
2
매서드 참조값 반환??
0
67
1
접근제어자 - 쇼핑카트 문제에서 상품출력 부분 메서드
0
71
1
자바 기본편 - .(dot)에 관한 질문입니다!
0
85
1
공부방법
0
77
2
상속관계에서 멤버 변수는 오버라이딩 되는 개념이 아닌가요?
0
82
1
static method 질문
0
67
1
캡슐화 문제풀이 ShoppingCart 요구사항에 문제가 있어보입니다. 피드백 주세요
0
98
1
Method1에서 Student 객체
0
74
1
3강 18. null 질문
0
69
1
this 와 super의 호출 순서는 부모-자식관계 떄문만인가요?
0
77
1
팩토리 메서드 패턴과 일반 생성자 사용의 장단점
0
97
1
문의
0
104
1
9장 상속 문제와 풀이 부분 궁금한게 있어서 질문드립니다
0
90
1
상속과 그에 따른 메모리 구조 질문
0
62
1
call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다
0
74
1
수강기한
0
136
1
기본편 객체지향 프로그래밍에 대한 정의
0
88
1
섹션10 상속 메모리 구조 및 문제 관련 질문
0
87
1
추가 지식 학습
0
153
2





