자바 의 권한 수정자(proctected)예제 상세 설명
대부분:https://blog.csdn.net/justloveyou_/article/details/61672133。그리고 이 블 로 그 를 바탕 으로 자신의 이 해 를 더 했다.
권한 제어 표
수식어
본 류
가방 종류
상속 류
기타
private
√
×
×
×
없 음(기본 값)
√
√
×
×
protected
√
√
√
×
public
√
√
√
√
proctected 에 대하 여
최근 Effective Java 를 보다 가
protected
수정자 에 대한 문제 가 발생 했 습 니 다.이 문제 에서 그것 에 대한 인식 은 내 가 이전에 그것 에 대한 인식 과 약간의 차이 가 있다.그 러 니까 여기 기록 해 봐.자바 언어 를 소개 하 는 많은 책(자바 프로 그래 밍 사상 포함)은 모두 proctected 에 대한 소개 가 비교적 간단 하 다.기본적으로 모두 한 마디 이다.즉,proctected 에 의 해 수 정 된 구성원 들 이 이 가방 과 그 하위 클래스 에 대해 볼 수 있다 는 것 이다.이런 견 해 는 너무 모호 해서 종종 사람들 에 게 오 해 를 살 수 있다.실제로 proctected 의 가시 성 은 두 가지 에 있다.
여기 서 한 가지 의문 은 상술 한 결론 의 두 번 째 점 이다.어떻게 보면 비교적 빙빙 돌 고 심지어 약간 모순 이 있 지만 아래 의 몇 가지 예 를 본 후에 이 해 는 더욱 깊 어 질 것 이다.
예시 1
p1/Father1.java
package basic.testprotected.p1;
public class Father1 {
protected void f() {} // Father1 protected
}
p1/Son1.java
package basic.testprotected.p1;
public class Son1 extends Father1{}
p11/Son11.java
package basic.testprotected.p11;
import basic.testprotected.p1.Father1;
public class Son11 extends Father1{}
p1/Test1.java먼저(1)(3)을 보면 그 중의 f()방법 은 클래스 Father 1 에서 계승 되 었 는데 그 가시 성 은 패키지 p1 과 그 하위 클래스 Son 1 과 Son 11 이 고 f()방법 을 호출 한 클래스 Test 1 이 있 는 패키지 도 p1 이기 때문에(1)(3)에서 컴 파일 되 었 다.즉,우리 가 가방 을 바 꾸 면,예 를 들 어 Test 11.자바 가 p11 아래 에 있 으 면 접근 할 수 없다 는 것 이다.다음 과 같다.
그 다음 에(2)(4)을 보면 그 중의 clone()방법의 가시 성 은
java.lang
가방 과 그 모든 자 류 이 고 문장son1.clone();
과son11.clone();
에 대해 이들 의 clone()은 류 Son 1,Son 11 에서 볼 수 있 지만 Test 1 에 대해 서 는 볼 수 없 기 때문에(1)(3)처 의 컴 파일 이 통과 되 지 않 는 다.즉,Son 1 이나 Son 11 이라는 두 가지 유형 에서clone()
방법 을 호출 하면 컴 파일 하여 통과 할 수 있다.사실 여기까지 내 가 만난 문 제 는 이미 기본적으로 해결 되 었 다.내 가 만난 상황 은 이곳 의 예시 코드 와 똑 같 기 때문이다.
예시 2
p2/MyObject2.java
package basic.testprotected.p2;
public class MyObject2 {
protected Object clone() throws CloneNotSupportedException{
return super.clone();
}
}
p22/Test2.java(1)의 경우 clone()방법 은 클래스 MyObject 2 자체 에서 나 온 것 이기 때문에 가방 p2 및 MyObject 2 의 하위 클래스 로 볼 수 있 습 니 다.Test 2 는 MyObject 2 의 하위 클래스 이지 만 Test 2 에 서 는 부모 류 MyObject 2 의 proctected 방법 clone()을 방문 할 수 없 기 때문에 컴 파일 이 통과 되 지 않 습 니 다.(2)Test 2 에서 부모 클래스 MyObject 2 에서 물 려 받 은 clone()을 방문 하기 때문에 컴 파일 이 통 과 됩 니 다.그래서 여기 서 위 에서 제시 한 두 번 째 결론 을 잘 논술 했다.
하위 클래스 와 부모 클래스 가 같은 가방 에 있 지 않 으 면 하위 클래스 에서 하위 클래스 인 스 턴 스 는 부모 클래스 에서 물 려 받 은 proctected 방법 에 접근 할 수 있 으 며,부모 클래스 인 스 턴 스 의 proctected 방법 에 접근 할 수 없습니다.
왜 이러 고 이러 고 어떻게 설명해 야 합 니까?
나 는 이것 이 하위 클래스 에 대한 보 이 는 정 의 를 생각해 야 할 것 이 라 고 생각한다.먼저 구조 함 수 를 추가 하고 이 구조 함수 에서 clone 방법 을 방문 할 수 있 습 니 다.이 방법 은
MyObject2
에서 나 옵 니 다.그래서 Test 22 를 하나 더 써 서 MyObject 2 에서 계승 한 다음 에 다시 쓰 는 방법
testSuperClone()
은 다음 과 같다.이 두 사람 사이 에는 아직도 약간의 차이 가 있 는 것 같다.그래서 저 는 하위 클래스 의 인 스 턴 스 를 볼 수 있 습 니 다.즉,하위 클래스 에서 하위 클래스 의 인 스 턴 스 를 통 해 해당 하 는 proctected 방법 을 방문 할 수 있 습 니 다.
예시 3
p3/MyObject3.java
package basic.testprotected.p3;
import basic.testprotected.p33.Test3;
public class MyObject3 extends Test3 {}
p33/Test3.java(1)에 대해 말하자면,clone()방법 은 클래스 Test 3 에서 왔 기 때문에,그 가시 성 은 패키지 p33 과 그 하위 클래스 MyObject 3 이 고,(1)은 바로 p33 의 클래스 Test 3 에서 호출 되 며,같은 패키지 에 속 하 며,컴 파일 이 통과 되 었 다.
예시 4
p4/MyObject4.java
package basic.testprotected.p4;
import basic.testprotected.p44.Test4;
public class MyObject4 extends Test4 {
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
p44/Test4.java(1)에 대해 말하자면,clone()방법 은 클래스 MyObject 4 에서 나 온 것 이기 때문에,그 가시 성 은 패키지 p4 와 그 하위 클래스(여기에 하위 클래스 가 없 음)이 고,클래스 Test 4 는 패키지 p44 에 있 기 때문에 가시 성에 만족 하지 않 고,컴 파일 이 통과 되 지 않 는 다.
예시 5
p5/MyObject5.java
package basic.testprotected.p5;
public class MyObject5 {
protected Object clone() throws CloneNotSupportedException{
return super.clone();
}
}
p5/Test5.java(1)에 대해 말하자면,clone()방법 은 클래스 MyObject 5 에서 나 온 것 이기 때문에,그 가시 성 은 패키지 p5 와 그 하위 클래스(여기에 하위 클래스 가 없 음)이 고,클래스 Test 5 도 패키지 p5 에 있 기 때문에 가시 성 을 만족 시 키 고 컴 파일 을 통과 한다.
예시 6
package p6;
class MyObject6 extends Test6{}
public class Test6 {
public static void main(String[] args) {
MyObject6 obj = new MyObject6();
obj.clone(); // Compile OK -------(1)
}
}
(1)의 경우 clone()방법 은 클래스 Test 6 에서 나 왔 기 때문에 그 가시 성 은 패키지 p6 와 그 하위 클래스 MyObject 6 이 고 클래스 Test 6 도 패키지 p6 에 있 기 때문에 가시 성 을 만족 시 키 고 컴 파일 을 통과 했다.예시 7
package p7;
class MyObject7 extends Test7 {
public static void main(String[] args) {
Test7 test = new Test7();
test.clone(); // Compile Error ----- (1)
}
}
public class Test7 {
}
(1)에 대해 말하자면,clone()방법 은 클래스 Object 에서 나 온 것 이기 때문에,이 clone()방법의 가시 성 은 패키지 java.lang 과 그 하위 클래스 Test 7 이다.클래스 MyObject 7 은 이 범위 내 에 있 지 않 기 때문에,가시 성 을 만족 시 키 지 못 하고,컴 파일 이 통과 되 지 않 는 다.총결산
자바 의 권한 수정자(proctected)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 권한 수정자(proctected)내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.