본문 바로가기
수업(국비지원)/Java

[Java] chap7 : 클래스의 관계 - 제한자(Modifier), 접근제한자

by byeolsub 2023. 4. 15.
  • 제한자(Modifier)
제한자(Modifier)
                같은 클래스  같은 패키지    상속된 개체   그외
  접근 제한자 : private < (default) < protected < public
                         (default) : 접근제한자 구현 안됨.
               멤버의 접근의 허용범위를 설정해주는 제한자        
  그외 제한자 : static, abstract(추상클래스나 추산메서드를 만듬), final
=================================================================================

- private 접근제한자 설정 : 동일 클래스내에서만 접근 허용
- default 접근제한자 : 동일 패키지 내에서만 접근 허용
- protected 접근제한자 : 상속된 개체에서만 접근 허용
- public 접근제한자 : 그외. 무조건 접근을 허용한다.

 

📌

package chap7;

import chap7.test.Modifier2;

class Modifier{
	private int v1 = 100; //private 접근제한자 설정 : 동일 클래스내에서만 접근 허용
	int v2 = 200;         //default 접근제한자 : 동일 패키지 내에서만 접근 허용
	protected int v3 = v1;//protected 접근제한자 : 상속된 개체에서만 접근 허용
	public int v4 = v2;   //public 접근제한자 : 그외. 무조건 접근을 허용한다.
	public void method() {
		System.out.println("chap7.Modifier 클래스의 method()");
		System.out.println("v1="+v1);
		System.out.println("v2="+v2);
		System.out.println("v3="+v3);
		System.out.println("v4="+v4);
	}
}
public class ModifierEx1 {
	public static void main(String[] args) {
			Modifier m = new Modifier();
//오류.		System.out.println("m.v1="+m.v1); // 현재 v1 변수는 Modifier 클래스 내에서만 접근 가능함
			System.out.println("m.v2="+m.v2); //Modifier, ModifierEx1가 같은 패키지안에 있기 때문에 가능
			System.out.println("m.v3="+m.v3);
			System.out.println("m.v4="+m.v4);
			m.method();
			
			Modifier2 m2 = new Modifier2(); //ModifierEx1 클래스아 다른 패키지의 클래스.
//오류.		System.out.println("m2.v1="+m2.v1);//private 접근 불가(같은 클래스가 아니여서)
//오류.		System.out.println("m2.v2="+m2.v2);//default 접근 불가(같은 패키지가 아니여서)
//오류.		System.out.println("m2.v3="+m2.v3);//protected 접근 불가(상속관계가 아니여서)
			System.out.println("m2.v4="+m2.v4);//무조건 접근 허용
		    System.out.println(m2);//m2.toString()호출
	}
}

  • 접근제한자
접근제한자 : 멤버의 접근 허용범위를 지정해주는 제한자.
   private < (default) < protected < public
  
 - 변수,상수,메서드 : private,(default),protected,public

 - 생성자 : private,(default),protected,public

 - 생성자 :private => 클래스의 객체를 나만 만들거야
          Math 클래스 생성자의 접근 제한자가 private
          Math 클래스의 모든 멤버는 static.(클래스 멤버다)
          (생성자의 접근제한자를 이용하여 객체 생성을 못하게 할 수 있다)

 - 클래스 : (default),public 가능       
  
                 파일명은 public 클래스의 이름과 같아야 한다.
                 하나의 파일에는 public 클래스가 한개만 가능하다.

 

 📌

package chap7;

import chap7.test.Modifier2;
// Modifier3,Modifier2 클래스의 패키지가 다르다.
class Modifier3 extends Modifier2{
	void method() {
//		System.out.println("v1="+v1);// Modifier2 클래스 외에는 접근 불가.
//		System.out.println("v2="+v2);// chap7.test에 속한 클래스에서만 접근 허용.
		System.out.println("v3="+v3);// Modifier3가 Modifier2 하위클래스 (상속)이므로 접근가능
		System.out.println("v4="+v4);// 모든 접근 허용
	}
}
public class ModifierEx2 {
	public static void main(String[] args) {
		Modifier3 m= new Modifier3();
		m.method();
//오류:	System.out.println(m.v1);// Modifier2 클래스에서만 접근할 수 있으므로
//오류:	System.out.println(m.v2);// 같은 클래스가 아니므로
//오류:	System.out.println(m.v3);//다른 패키지고 상속관계가 아니므로
		System.out.println(m.v4);
//오류:	Math a= new Math();// 객체 생성 불가능. 생성자 접근제한자가 private
		System.out.println(Math.random());
	}
}