protected접근제한자

Mia Lee·2021년 12월 9일
0

JAVA

목록 보기
69/98
package ex_other;

import ex_protected.*;

// Parent 클래스를 상속받아 정의
// => 서로 다른 패키지에 위치하므로 import문 필수!
public class OtherPackageChildClass extends Parent {
	
	public void useMember() {
		
		// 상속 관계에 있는 멤버는 인스턴스 생성 없이 직접 접근해야함
		// => 인스턴스를 생성할 경우 is-a 관계가 아닌 has-a 관계로 바뀜
		System.out.println(publicVar); // O
		System.out.println(protectedVar); // O
		// => 패키지가 다르지만, 상속 관계이므로 접근 가능
//		System.out.println(defaultVar); // X
		// => 다른 패키지에서 접근 불가
//		System.out.println(privateVar); // X
		// => 다른 클래스에서 접근 불가
		
		// 인스턴스를 생성할 경우
		// => 상속 관계까 아닌 일반 포함관계(has-a)의 클래스로 취급
		Parent p = new Parent();
		System.out.println(p.publicVar); // O
//		System.out.println(p.protectedVar); // X
		// => 패키지가 다르고, 상속 관계가 아니므로 접근 불가
		
		
		
	}

}
package ex_protected;

public class Ex1 {

	public static void main(String[] args) {

		/*
		 * 접근제한자 복습 및 추가
		 * 1. public - 모든 클래스에서 접근 가능
		 * 2. protected - 같은 패키지 또는 다른 패키지이면서 상속 관계의 클래스에서 접근 가능 
		 * 3. default - 같은 패키지 내의 클래스에서 접근 가능
		 *    => 접근제한자를 아무것도 명시하지 않으면 default로 선언됨
		 *    => 패키지가 다르면 접근 불가
		 * 4. private - 자신의 클래스에서만 접근 가능
		 *              (다른 클래스에서 접근 불가)
		 */
		
		Parent obj = new Parent();
		// 같은 패키지 내, 상속 X
		System.out.println("publicVar = " + obj.publicVar); // O
		System.out.println("protectedVar = " + obj.protectedVar); // O
		System.out.println("defaultVar = " + obj.defaultVar); // O
//		System.out.println("privateVar = " + obj.privateVar); // X
		// => 다른 클래스에서 접근 불가
		
	}

}









0개의 댓글