접근지정자(=접근제한자)

범위
public > protected > default > private

 

ˇprivate

자기 클래스 내에서만 접근 가능하다, 같은 패키지에서도 접근할 수 없다

 

ˇdefault

같은 패키지에 있는 클래스끼리 접근 가능(자기 클래스 내에서도 접근 가능)

다른 패키지에 있는 클래스에 접근 불가능

다른 패키지에 있는 상속받은 자식클래스의 객체(D)를 통해서도 접근 불가능

 

ˇprotected

같은 패키지에 있는 클래스끼리 접근 가능(자기 클래스 내에서도 접근 가능)

다른 패키지에 있는 클래스 접근 불가능

다른 패키지에 있는 상속받은 자식클래스의 객체(D)를 통해서 접근 가능

 

**상속기법 

캡슐화-> 상속기법을 사용하면서 접근지정자를 protected 권한을 부여하면 된다

 

ˇpublic 

같은 패키지에 있는 클래스끼리 접근 가능(자기 클래스 내에서도 접근 가능)

다른 패키지에 있는 클래스 접근 가능

다른 패키지에 있는 상속받은 자식클래스의 객체(D)를 통해서 접근 가능

=> 사용에 제한이 없다

 

**하지만, 예외적인 경우가 있다

=> 접근지정자가 멤버변수, 메서드에게만 부여되는 것이 아니다

     클래스 앞에도 접근지정자를 부여할 수 있다

public class A 로 작성한다는 전제조건이 있는 경우만 사용에 제한이 없는 것이다 

public 접근지정자를 쓰지 않는 경우에는 다른 패키지에서 접근할 수 없다

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

예시) public 클래스(A, B, C, D)의 멤버변수, 메서드의 접근 가능 여부 확인해보기

package j210113_test package j210113_test2
A  (자기 클래스)
B  (다른 클래스)

D extends A 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

package j23_test;

//A클래스의 public 접근지정자를 쓰지 않는 경우,
//다른 패키지의 클래스들이 하단의 A클래스에 접근할 수 없다
public class A {
	//private 멤버변수 앞에 부여=> 객체명.멤버변수=값 => 이런식으로 직접 접근 불가능함
	//setter,getter method 로 접근할 수 있음
	private int i=10;
	
	//default 접근지정자가 부여된 멤버변수(default키워드를 붙이지는 않는다)
	int j;
	
	//protected 접근지정자가 부여된 멤버변수
	protected int k;
	
	//public 접근지정자가 부여된 멤버변수
	public int m;
	
	//private(메서드 앞에 부여) => 외부(같은 패키지, 다른 패키지)에서 절대 호출불가
	private void print() {
		System.out.println("private i =>"+i);
	}
	
	//default 메서드(default키워드를 붙이지는 않는다)
	//=>default키워드 붙이는 경우: interface에서 코드가 포함된 메소드를 선언할때. 
	void print2() {
		System.out.println("default j=>"+j);
	}
	
	//protected 
	protected void print3() {
		System.out.println("protected k=>"+k);
	}
	
	//public
	public void print4() {
		System.out.println("public m=>"+m);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a = new A();
		System.out.println("-------private 권한---------");
		a.i=10;
		a.print();
		System.out.println("---default 권한(같은 클래스)---");
		a.j=20;
		a.print2();
		System.out.println("--protected 권한(같은 클래스)--");
		a.k=30;
		a.print3();
		System.out.println("--public 권한(같은 클래스)--");
		a.m=40;
		a.print4();
	}
}/*
-------private 권한---------
private i =>10
---default 권한(같은 클래스)---
default j=>20
--protected 권한(같은 클래스)--
protected k=>30
--public 권한(같은 클래스)--
public m=>40
*/
package j23_test;
//같은 패키지안에 들어가 있는 다른 클래스는 import 명령어가 필요없다
//자동으로 인식하기 때문에
public class B {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a =new A();
		/*
		System.out.println("--private 권한(같은 패키지내에 있어도 접근 불가)--");
		a.print();
		a.i=10;
		*/
		System.out.println("--default 권한(같은 패키지에 있는 경우 허용함)--");
		a.j=20;
		a.print2();
		System.out.println("--protected 권한(같은 패키지에 있는 경우 허용함)--");
		a.k=30;
		a.print3();
		System.out.println("--public 권한(같은 패키지에 있는 경우 허용함)--");
		a.m=40;
		a.print4();
	}
}/*
--default 권한(같은 패키지에 있는 경우 허용함)--
default j=>20
--protected 권한(같은 패키지에 있는 경우 허용함)--
protected k=>30
--public 권한(같은 패키지에 있는 경우 허용함)--
public m=>40
*/
package j23_test2;
import j23_test.A;
public class C {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a = new A();
		/*System.out.println("--default 권한(다른 패키지에 있는 경우 허용x)--");
		a.j=20;
		a.print2();*/
		/*System.out.println("--protected 권한(다른 패키지에 있는 경우 허용x)--");
		a.k=30;
		a.print3();*/
		System.out.println("--public 권한(다른 패키지에 있는 경우 허용o)--");
		a.m=40;
		a.print4();
	}
}/*
--public 권한(다른 패키지에 있는 경우 허용o)--
public m=>40
*/
package j23_test2;

public class D extends  j23_test.A {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		D d = new D();
		/*System.out.println("default 권한(상속을 받은 자식클래스의 객체도 접근 불가)");
		d.j=20;
		d.print2();*/
		System.out.println("protected 권한(상속을 받은 자식클래스의 객체 접근 가능)");
		d.k=30;
		d.print3();
		System.out.println("public 권한(상속을 받은 자식클래스의 객체 접근 가능)");
		d.m=40;
		d.print4();
	}
}/*
protected 권한(상속을 받은 자식클래스의 객체 접근 가능)
protected k=>30
public 권한(상속을 받은 자식클래스의 객체 접근 가능)
public m=>40
*/

 


라이브러리

개발자들에게 유용하게 사용될 클래스들을 간편하게 갖다 쓸 수 있도록 함.

정확한 위치만 알고있다면 그 클래스의 객체를 생성하여 멤버변수, 메섣를 자유롭게 호출할 수 있다

-> 클래스를 묶어놓은 파일-> 압축해서 (rt.jar)에 들어있음

+ Recent posts