Java에는 두 가지 유형의 수정자가 있습니다. 액세스 수정자 그리고 비접근 한정자 .
Java의 액세스 한정자는 필드, 메서드, 생성자 또는 클래스의 접근성이나 범위를 지정합니다. 필드, 생성자, 메소드 및 클래스에 액세스 수정자를 적용하여 액세스 수준을 변경할 수 있습니다.
Java 액세스 수정자에는 네 가지 유형이 있습니다.
정적, 추상, 동기화, 네이티브, 휘발성, 일시적 등 비액세스 한정자가 많이 있습니다. 여기서는 액세스 한정자에 대해서만 알아보겠습니다.
Java 액세스 수정자 이해
간단한 표를 통해 Java의 액세스 수정자를 이해해 보겠습니다.
액세스 수정자 | 수업 중 | 패키지 내 | 하위 클래스로만 외부 패키지 | 외부 패키지 |
---|---|---|---|---|
사적인 | 그리고 | N | N | N |
기본 | 그리고 | 그리고 | N | N |
보호됨 | 그리고 | 그리고 | 그리고 | 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보다 더 제한적입니다. 그렇기 때문에 컴파일 타임 오류가 발생합니다.