프로그래밍 언어/JAVA
[JAVA] 접근 제한자
김곰댕
2021. 6. 30. 16:28
728x90
접근 제한자(Access Modifier)
클래스 및 클래스의 구성 멤버에 대한 접근을 제한하는 역할
1. 다른 패키지에서 클래스를 사용하지 못하도록 막는다. (클래스 제한)
2. 클래스로부터 객체를 생성하지 못하도록 막는다. (생성자 제한)
3. 특정 필드와 메소드를 숨김 처리한다. (필드와 메소드 제한)
접근 제한자의 종류
protected 접근 제한자
상속과 관련된 접근 제한자
- 같은 패키지 : default와 동일
- 다른 패키지 : 자식 클래스만 접근 허용
예제)
package sec13.exam02_constructor_access.package1;
public class A
{
A a1 = new A(true);
A a2 = new A();
A a3 = new A("문자열");
//앞에 어떤게 붙더라도 자기 자신 클래스 내에서는 사용 가능
public A(boolean b) //public 생성자
{
}
A() //default 생성자
{
}
private A(String s) //private 생성자
{
}
}
package sec13.exam02_constructor_access.package1;
public class B
{
//A와 같은 패키지 내에 위치해 있음
A a1 = new A(true);
A a2 = new A();
//A a3 = new A("문자열"); private라서 외부에서 접근이 불가능함, 오류 뜸
}
package sec13.exam02_constructor_access.package2;
import sec13.exam02_constructor_access.package1.A;
public class C
{
//A와 다른 패키지에 위치해 있음.
A a1 = new A(true);
//A a2 = new A(); default라서 다른 패키지에 위치해 있기 때문에 오류가 뜸
//A a3 = new A("문자열"); private이기 때문에 외부에서 접근이 불가늠, 오류 뜸
}
package sec13.exam03_field_method_access.package1;
public class A
{
public int field1;
int field2;
private int field3;
public A()
{
field1 = 1;
field2 = 1;
field3 = 1;
method1();
method2();
method3();
}
public void method1()
{
}
void method2()
{
}
private void method3()
{
}
}
package sec13.exam03_field_method_access.package1;
public class B
{
public B()
{
A a = new A();
a.field1 = 1;
a.field2 = 1;
//a.field3 = 1; private이기 때문에 오류
a.method1();
a.method2();
//a.method3(); private이기 때문에 오류
}
}
package sec13.exam03_field_method_access.package2;
import sec13.exam03_field_method_access.package1.A;
public class C {
public C()
{
A a = new A();
a.field1 = 1;
//a.field2 = 1; default이기 때문에 오류
//a.field3 = 1; private이기 때문에 오류
a.method1();
//a.method2(); default이기 때문에 오류
//a.method3(); private이기 때문에 오류
}
}
728x90