1. 내부 클래스
정적 변수와 정적 메서드가 있다는 사실을 최근에 배웠습니다. 정적 클래스도 있음이 밝혀졌습니다. 그러나 우리는 멀리서 이 주제에 접근할 것입니다.
Java에서는 클래스 내에서 클래스를 선언하는 것이 전적으로 허용됩니다. 그리고 클래스 내의 클래스 내에 있는 클래스 내의 클래스도 있습니다. 모든 것이 매우 간단해 보입니다.
class OuterClass
{
variables of the class
methods of the class
class NestedClass
{
variables of the class
methods of the class
}
}
우리는 다른 클래스 안에 하나의 클래스를 선언할 뿐입니다. 저것과 같이 쉬운.
예:
public class Solution
{
static ArrayList<Point> points = new ArrayList<Point>();
public static void main(String[] args)
{
Point point = new Point();
point.x = 100;
point.y = 200;
points.add(point);
}
static class Point
{
int x;
int y;
}
}
중첩 클래스는 정적이거나 비정적일 수 있습니다. 정적 중첩 클래스는 단순히 정적 중첩 클래스 라고 합니다 . 비정적 중첩 클래스를 내부 클래스 ( 내부 클래스 )라고 합니다.
2. 정적 클래스
정적 중첩 클래스는 외부 클래스 외부에서 사용할 수 있습니다. 이러한 클래스에 공용 액세스 한정자가 있는 경우 프로그램의 어디에서나 사용할 수 있습니다. 이러한 클래스는 일반 클래스와 거의 구별할 수 없습니다. 그러나 몇 가지 차이점이 있습니다.
클래스 이름
외부 클래스가 아닌 다른 곳에서 정적 중첩 클래스를 참조하려면 외부 클래스 이름과 중첩 클래스 이름으로 구성된 클래스 이름을 지정해야 합니다. 이 이름의 일반적인 모양은 다음과 같습니다.
OuterClass.InnerClass
예:
아우터 클래스 | 중첩 클래스 | 중첩 클래스의 전체 이름 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
중첩 클래스에 자체 중첩 클래스가 있는 경우 해당 이름은 단순히 점을 사용하여 연결됩니다.
JDK에서 중첩된 클래스의 전형적인 예는 클래스 Entry
내부의 클래스 입니다 Map
. HashMap
객체 에 entrySet()
저장된 키-값 쌍 세트를 가져오려면 .Set<Map.Entry>
이것은 외부 클래스와 중첩 클래스의 예입니다.Map.Entry
개체 만들기
정적 중첩 클래스의 개체를 만드는 것은 매우 쉽습니다. 다음과 같이 표시됩니다.
OuterClass.NestedClass name = new OuterClass.NestedClass();
일반 클래스와 동일하지만 이름은 두 부분으로 구성됩니다.
정적 메서드 호출
정적 클래스에 정적 메서드가 있는 경우 일반 클래스의 정적 메서드와 동일한 방식으로 액세스할 수 있습니다(단, 클래스 이름은 두 부분으로 구성됨).
OuterClass.NestedClass.staticMethod();
정적 변수에 액세스
중첩 클래스의 공개 정적 변수에 액세스하는 것도 쉽습니다.
OuterParent.NestedClass.nameOfStaticVariable
3. 정적 클래스의 특징
정적 중첩 클래스는 정적이라고 할 이유가 가장 적습니다 . 그것들은 일반 클래스처럼 동작합니다 . 비정적 메서드에서 액세스하는 데 제한이 없습니다.
외부 클래스 내에서 정적 중첩 클래스로 작업하는 경우 가장 일반적인(중첩 및 정적이 아닌) 클래스와 어떤 차이도 느끼지 못할 것입니다.
예:
정적 중첩 포인트 클래스 | 일반 포인트 클래스. |
---|---|
|
|
일부 정적 중첩 클래스를 외부 클래스 밖으로 이동하면 변경되는 유일한 사항은 새 클래스가 더 이상 private static
이전 외부 클래스의 변수 및 메서드에 액세스할 수 없다는 것입니다.
예:
정적 중첩 포인트 클래스 | 일반 포인트 클래스. |
---|---|
|
|
main
일반 Point
클래스 의 메서드 는 클래스 의 변수 에 액세스 할 수 없습니다 !private static
points
Solution
이것이 정적 중첩 클래스와 일반 클래스의 주요 차이점입니다. 정적 중첩 클래스의 메서드는 선언된 경우에도 외부 클래스의 모든 정적 변수 및 메서드에 액세스할 수 있습니다 private
.
생각해 보면 왜 놀라운 일입니까? 수정 자는 private
이 수정자가 표시한 변수와 메서드는 해당 클래스 내에서만 액세스할 수 있다고 명시적으로 말합니다. 외부 클래스 안에 정적 중첩 클래스가 있습니까? 예, 문제 없습니다! 원하는 만큼 액세스하세요.