logo

Java의 액세스 수정자

  1. 비공개 액세스 수정자
  2. 민간 생성자의 역할
  3. 기본 액세스 수정자
  4. 보호된 액세스 수정자
  5. 공개 액세스 수정자
  6. 메서드 재정의가 포함된 액세스 수정자

Java에는 두 가지 유형의 수정자가 있습니다. 액세스 수정자 그리고 비접근 한정자 .

Java의 액세스 한정자는 필드, 메서드, 생성자 또는 클래스의 접근성이나 범위를 지정합니다. 필드, 생성자, 메소드 및 클래스에 액세스 수정자를 적용하여 액세스 수준을 변경할 수 있습니다.

Java 액세스 수정자에는 네 가지 유형이 있습니다.

    사적인: private 한정자의 접근 수준은 클래스 내에서만 가능합니다. 클래스 외부에서는 접근이 불가능합니다.기본: 기본 수정자의 액세스 수준은 패키지 내에서만 가능합니다. 패키지 외부에서는 접근이 불가능합니다. 액세스 수준을 지정하지 않으면 기본값이 됩니다.보호됨: 보호된 한정자의 액세스 수준은 패키지 내부에 있고 하위 클래스를 통해 패키지 외부에 있습니다. 하위 클래스를 만들지 않으면 패키지 외부에서 접근할 수 없습니다.공공의: 공개 수정자의 액세스 수준은 어디에나 있습니다. 클래스 내부, 클래스 외부, 패키지 내부 및 패키지 외부에서 액세스할 수 있습니다.

정적, 추상, 동기화, 네이티브, 휘발성, 일시적 등 비액세스 한정자가 많이 있습니다. 여기서는 액세스 한정자에 대해서만 알아보겠습니다.


Java 액세스 수정자 이해

간단한 표를 통해 Java의 액세스 수정자를 이해해 보겠습니다.

액세스 수정자수업 중패키지 내하위 클래스로만 외부 패키지외부 패키지
사적인 그리고NNN
기본 그리고그리고NN
보호됨 그리고그리고그리고N
공공의 그리고그리고그리고그리고

1) 비공개

개인용 접근 한정자는 클래스 내에서만 접근 가능합니다.

관계이다

개인 액세스 수정자의 간단한 예

이 예에서는 A와 Simple이라는 두 개의 클래스를 만들었습니다. 클래스에는 개인 데이터 멤버와 개인 메서드가 포함되어 있습니다. 클래스 외부에서 이러한 전용 멤버에 액세스하고 있으므로 컴파일 타임 오류가 있습니다.

 class A{ private int data=40; private void msg(){System.out.println('Hello java');} } public class Simple{ public static void main(String args[]){ A obj=new A(); System.out.println(obj.data);//Compile Time Error obj.msg();//Compile Time Error } } 

민간 건설사의 역할

클래스 생성자를 비공개로 설정하면 클래스 외부에서 해당 클래스의 인스턴스를 만들 수 없습니다. 예를 들어:

 class A{ private A(){}//private constructor void msg(){System.out.println('Hello java');} } public class Simple{ public static void main(String args[]){ A obj=new A();//Compile Time Error } } 

참고: 클래스는 중첩 클래스를 제외하고 비공개이거나 보호될 수 없습니다.


2) 기본값

수정자를 사용하지 않으면 다음과 같이 처리됩니다. 기본 기본적으로. 기본 수정자는 패키지 내에서만 액세스할 수 있습니다. 패키지 외부에서는 접근이 불가능합니다. 비공개보다 더 많은 접근성을 제공합니다. 그러나 보호되는 것보다 더 제한적이고 공개적입니다.

새로운 라인 파이썬

기본 액세스 한정자의 예

이 예에서는 pack과 mypack이라는 두 개의 패키지를 만들었습니다. A 클래스는 공개가 아니므로 패키지 외부에서 액세스할 수 없으므로 패키지 외부에서 A 클래스에 액세스합니다.

 //save by A.java package pack; class A{ void msg(){System.out.println('Hello');} } 
 //save by B.java package mypack; import pack.*; class B{ public static void main(String args[]){ A obj = new A();//Compile Time Error obj.msg();//Compile Time Error } } 

위의 예에서 클래스 A의 범위와 해당 메서드 msg()는 기본값이므로 패키지 외부에서 액세스할 수 없습니다.


3) 보호됨

그만큼 보호된 액세스 수정자 패키지 내부 및 패키지 외부에서 액세스할 수 있지만 상속을 통해서만 액세스할 수 있습니다.

protected 액세스 한정자는 데이터 멤버, 메서드 및 생성자에 적용될 수 있습니다. 수업에 적용할 수 없습니다.

기본 수정자보다 더 많은 접근성을 제공합니다.

보호된 액세스 한정자의 예

이 예에서는 pack과 mypack이라는 두 개의 패키지를 만들었습니다. Pack 패키지의 A 클래스는 공개이므로 패키지 외부에서 액세스할 수 있습니다. 하지만 이 패키지의 msg 메소드는 protected로 선언되어 있어 클래스 외부에서는 상속을 통해서만 접근이 가능합니다.

 //save by A.java package pack; public class A{ protected void msg(){System.out.println('Hello');} } 
 //save by B.java package mypack; import pack.*; class B extends A{ public static void main(String args[]){ B obj = new B(); obj.msg(); } } 
 Output:Hello 

4) 공개

그만큼 공개 액세스 수정자 어디서나 접근 가능합니다. 다른 모든 수정자 중에서 범위가 가장 넓습니다.

공개 액세스 수정자의 예

SQL 연결
 //save by A.java package pack; public class A{ public void msg(){System.out.println('Hello');} } 
 //save by B.java package mypack; import pack.*; class B{ public static void main(String args[]){ A obj = new A(); obj.msg(); } } 
 Output:Hello 

메소드 재정의를 사용한 Java 액세스 수정자

메서드를 재정의하는 경우 재정의된 메서드(즉, 하위 클래스에 선언됨)가 더 제한적이어서는 안 됩니다.

 class A{ protected void msg(){System.out.println('Hello java');} } public class Simple extends A{ void msg(){System.out.println('Hello java');}//C.T.Error public static void main(String args[]){ Simple obj=new Simple(); obj.msg(); } } 

기본 수정자는 protected보다 더 제한적입니다. 그렇기 때문에 컴파일 타임 오류가 발생합니다.