반응형
1. 접근제한자(접근지정자)의 종류
- 🔐클래스 ,🔐필드 , 🔐메소드에 대한 접근 유무를 설정하기 위한 제한자
- 외부에서 접근할 수 있는 레벨
- 접근 키워드(keyword)
2. priavte - 같은 클래스 내 접근 가능
- 필드 와 메소드에 사용 가능한 접근제한자 - 은닉화
- 클래스는 사용 불가능
- 클래스 내부에서만 접근 가능하며 클래스 외부에서는 접근 불가능
1) 클래스 내 : 접근ok
package xyz.itwill.access;
//public클래스
public class PrivateMember {
//private필드
private int num;
//private메소드
private void display() {
System.out.println("num = "+num); //동일클래스는 private필드 사용가능
}
}
2) 외부 클래스 : 접근error
package xyz.itwill.access;
public class PrivateMemberUse {
public void run() {
PrivateMember member=new PrivateMember();//객체생성ok - public이기때문
//member.num=100;//error - private이기때문
//member.display();//error -private이기때문
}
}
3. public - 무제한 접근 가능
- 클래스 ,필드 , 메소드에 사용 가능한 접근제한자
- 모든 패키지의 클래스에서 접근 가능하도록 설정
1) public 클래스
- 다른 패키지에 클래스에서 접근할 수 있도록 작성된 클래스
- public 클래스가 아닌 경우 다른 패키지의 클래스에서 접근 불가능 - 에러 발생
- 소스파일에 public 클래스는 하나만 작성 가능
- 소스파일에는 클래스 하나만 작성 권장
//클래스A.java - ok
public class 클래스A{}
//클래스A.java - ok(권장)
class 클래스A{}
//클래스A.java - ok(비권장)
public class 클래스A{}
class 클래스B{}
//클래스A.java or 클래스B.java - ok (비권장)
class 클래스A{}
class 클래스B{}
//error
public class 클래스A{}
public class 클래스B{}
2) 클래스내 : 접근ok
package xyz.itwill.access;
//public클래스
public class PublicMember {
//public필드
public int num;
//public메소드
public void display() {
System.out.println("num = "+num);
}
}
3) 동일패키지 : 접근ok
package xyz.itwill.access;
public class PublicMemberUse {
public void run() {
PublicMember member=new PublicMember();
member.num=100;
member.display();
}
}
4) 다른패키지 : 접근ok
package xyz.itwill.other;
import xyz.itwill.access.PublicMember;
public class PublicMemberOtherUse {
public void run() {
PublicMember member=new PublicMember();//다른 패키지의 클래스를 사용하기 위한 import 처리
member.num=100;
member.display();
}
}
4. protected - 같은패키지 및 자식클래스만 접근 가능
- 필드 , 메소드에 사용 가능한 접근제한자
- 같은 패키지의 클래스에서 접근 가능하도록 설정
- 다른 패키지의 클래스에서 접근할 경우 에러 발생되지만, 상속을 사용하면 접근 가능
1) 클래스내 : 접근ok
package xyz.itwill.access;
//public클래스
public class ProtectedMember {
//protected필드
protected int num;
//protected메소드
protected void display() {
System.out.println("num = "+num);
}
}
2) 동일패키지 : 접근ok
package xyz.itwill.access;
public class ProtectedMemberUse {
public void run() {
//객체생성ok - public이기때문
ProtectedMember member=new ProtectedMember();
member.num=100; //ok
member.display(); //ok
}
}
3) 다른패키지 : 접근error
package xyz.itwill.other;
import xyz.itwill.access.ProtectedMember;
public class ProtectedMemberOtherUse {
public void run() {
//객체생성ok - public이기때문
ProtectedMember member=new ProtectedMember();
//member.num=100; //error
//member.display(); //error
}
}
4) 다른패키지 + 자식클래스 : 접근ok
package xyz.itwill.other;
import xyz.itwill.access.ProtectedMember;
public class ProtectedMemberOtherInheritanceUse extends ProtectedMember {
public void run() {
//객체생성ok - public이기때문
ProtectedMember member=new ProtectedMember();
//protected 접근제한자로 설정된 부모클래스의 필드 또는 메소드에 접근 가능
num=100; //ok
display(); //ok
}
}
5. package(default) - 같은 패키지끼리만 접근 가능
- 클래스 , 필드 , 메소드 에 사용 가능한 접근제한자
- 클래스 , 필드 , 메소드 작성시 접근제한자 관련 키워드를 사용하지 않으면 package 접근제한자로 설정됨
- 같은 패키지의 클래스에서 접근 가능하도록 설정
- 다른 패키지의 클래스에서 접근할 경우 무조건 에러 발생
1) 클래스내 : 접근ok
package xyz.itwill.access;
//public클래스
public class PackageMember {
//package필드
int num;
//package메소드
void display() {
System.out.println("num = "+num);
}
}
2) 동일패키지 : 접근ok
package xyz.itwill.access;
public class PackageMemberUse {
public void run() {
//객체생성ok - public이기때문
PackageMember member=new PackageMember();
member.num=100; //ok
member.display(); //ok
}
}
3) 다른패키지 : 접근error
package xyz.itwill.other;
import xyz.itwill.access.PackageMember;
public class PackageMemberOtherUse {
public void run() {
//객체생성ok - public이기때문
@SuppressWarnings("unused")
PackageMember member=new PackageMember();
//member.num=100; //error
//member.display(); //error
}
}
4) 다른패키지 + 자식클래스여도 : 접근error
package xyz.itwill.other;
import xyz.itwill.access.PackageMember;
public class PackageMemberOtherInheritanceUse extends PackageMember {
public void run() {
//객체생성ok - public이기때문
PackageMember member=new PackageMember();
//num=100; //error
//display(); //error
}
}
반응형
'java > inheritance' 카테고리의 다른 글
[inheritance] 12. 키보드로 입력받아 모니터에 출력하는 프로그램 (CalcAgeApp) (0) | 2024.04.26 |
---|---|
[inheritance] 11. 패키지(package) (0) | 2024.04.25 |
[inheritance] 9. 사원 급여 관리 프로그램 (EmployeeApp) (0) | 2024.04.24 |
[inheritance] 8. 제한자 (abstract, final, static) (0) | 2024.04.24 |
[inheritance] 7. object 클래스 (0) | 2024.04.23 |