내가 알고 싶은 것은 자바가 내부 클래스 내부의 정적 필드 / 메서드를 금지하는 이유입니다.
내부 클래스는 "인스턴스"내부 클래스이기 때문입니다. 즉, 둘러싸는 개체의 인스턴스 속성과 같습니다.
그들은 "인스턴스"클래스이기 때문에 static
기능 을 허용 하는 static
것은 의미가 없습니다. 왜냐하면는 처음에 인스턴스없이 작동하기 위한 것 입니다.
정적 / 인스턴스 속성을 동시에 생성하려고하는 것과 같습니다.
다음 예를 살펴보십시오.
class Employee {
public String name;
}
두 개의 employee 인스턴스를 생성하는 경우 :
Employee a = new Employee();
a.name = "Oscar";
Employee b = new Employee();
b.name = "jcyang";
왜 각각의 자산에 대해 고유 한 가치가 있는지 분명합니다. name
그렇죠?
내부 클래스도 마찬가지입니다. 각 내부 클래스 인스턴스는 다른 내부 클래스 인스턴스와 독립적입니다.
따라서 counter
클래스 속성 을 만들려고하면 두 개의 다른 인스턴스에서 해당 값을 공유 할 방법이 없습니다.
class Employee {
public String name;
class InnerData {
static count;
}
}
인스턴스 생성 할 때 a
와 b
위의 예를, 어떤 정적 변수에 대한 올바른 값이 될 것이다 count
? InnerData
클래스 의 존재 는 둘러싸고있는 각 객체에 완전히 의존 하기 때문에이를 결정할 수 없습니다 .
그렇기 때문에 클래스가으로 선언되면 static
더 이상 살아있는 인스턴스가 필요하지 않습니다. 이제 종속성이 없으므로 정적 속성을 자유롭게 선언 할 수 있습니다.
반복적으로 들리지만 인스턴스 속성과 클래스 속성의 차이점을 생각하면 이해가 될 것입니다.