감독
- 추상 클래스
- 결정적인
- 액세스 수정자
- 인터페이스 등
액세스 수정자
– 클래스 멤버(변수 및 메서드)에 대한 액세스 권한을 지정합니다.
전임자)
class A {
public String y(){
return "public void y()";
}
private String z(){
return "public void z()";
}
public String x(){
return z();
}
}
public class AccessDemo1 {
public static void main(String() args) {
A a = new A();
System.out.println(a.y());
// 아래 코드는 오류가 발생한다.
//System.out.println(a.z());
System.out.println(a.x());
}
}
z 방법이 잘못된 이유는 무엇입니까?
– 메서드는 private 키워드로 시작합니다.
비공개는 클래스(A) 외부에서 액세스할 수 없음을 의미합니다.
private을 대체하는 것을 액세스 수정자라고 합니다.
그러나 z 메소드가 리턴할 때 x 메소드가 오류를 리턴하지 않는 이유는 무엇입니까?
– 액세스 한정자가 public이기 때문에 호출할 수 있습니다.
메서드 내용을 보면 내부적으로 메서드 z가 호출된다.
메서드 z는 정상적으로 호출됩니다.
메서드 x와 메서드 z가 같은 클래스에 속하기 때문입니다.
액세스 수정자를 사용하는 이유
– 객체의 로직을 보호하기 위해 구성원을 기준으로 외부 접근을 허용하거나 차단할 필요가 있습니다.
– 사용자에게 객체를 조작할 수 있는 수단만을 제공하여 사용자가 객체 사용에 집중할 수 있도록 도와줍니다.
전임자)
class Calculator{
private int left, right;
public void setOprands(int left, int right){
this.left = left;
this.right = right;
}
private int _sum(){
return this.left+this.right;
}
public void sumDecoPlus(){
System.out.println("++++"+_sum()+"++++");
}
public void sumDecoMinus(){
System.out.println("----"+_sum()+"----");
}
}
public class CalculatorDemo {
public static void main(String() args) {
Calculator c1 = new Calculator();
c1.setOprands(10, 20);
c1.sumDecoPlus(); // 출력 결과 :++++30++++
c1.sumDecoMinus(); // 출력 결과 :----30----
}
}
미세 제어
사람들 | 보호 | 기본 | 사적인 | |
같은 패키지, 같은 클래스 | 허용하다 | 허용하다 | 허용하다 | 허용하다 |
동일한 패키지, 상속 관계 | 허용하다 | 허용하다 | 허용하다 | 불용성 |
동일한 패키지, 상속 관계 없음 | 허용하다 | 허용하다 | 허용하다 | 불용성 |
다른 패키지, 상속 관계 | 허용하다 | 허용하다 | 불용성 | 불용성 |
다른 패키지, 상속 관계 없음 | 허용하다 | 불용성 | 불용성 | 불용성 |
클래스 액세스 한정자
– 이 클래스에는 public 및 default의 두 가지 액세스 한정자가 있습니다.
– 액세스 한정자가 첨부되지 않은 경우 기본값이 기본값이 됩니다.
– 액세스 한정자가 public인 클래스는 다른 패키지의 클래스에서 사용할 수 있습니다.
– 기본적으로 동일한 패키지 내에서만 사용 가능합니다.
전임자)
클래스 2개 만들기
public class PublicClass {} // public 접근 제어자
class DefaultClass {} // default 접근 제어자
동일한 패키지 오류 X
public class ClassAccessModifierInnerPackage {
PublicClass publicClass = new PublicClass();
DefaultClass defaultClass = new DefaultClass();
}
기타 패키지에서 오류 보고
public class ClassAccessModifierOuterPackage {
PublicClass publicClass = new PublicClass();
//DefaultClass defaultClass = new DefaultClass();
}
한 가지 중요한 제한이 있습니다.
공개 클래스를 포함하는 소스 코드는 공개 클래스와 동일한 클래스 이름과 소스 코드의 파일 이름을 가져야 합니다.
코드를 살펴보겠습니다.
이 코드의 이름은 PublicNameDemo.java입니다.
//public class PublicName {}
public class PublicNameDemo {}
주석 처리된 섹션은 오류를 발생시킵니다.
공개 클래스의 이름과 소스 코드의 이름이 일치하지 않기 때문입니다.
이는 하나의 소스 코드에 공용 클래스가 존재할 수 있음을 의미합니다.