Programing

Java에 하위 클래스 가시성 수정자가없는 이유는 무엇입니까?

lottogame 2020. 11. 6. 07:46
반응형

Java에 하위 클래스 가시성 수정자가없는 이유는 무엇입니까?


한 번 이상 Java에서는 불가능한 가변 가시성을 원했습니다. 특정 멤버가 자신의 클래스와 모든 하위 클래스 내에서 표시 되길 원했지만 패키지의 나머지 부분이나 나머지 세계에서는 볼 수 없었습니다. 즉, 나는 이것을 원했습니다.

Modifier        Class     Package   Subclass  World
sub-class       Y         N         Y         N

그러나 Java 디자이너는 나에게 다음과 같이 주었습니다 .

Modifier        Class     Package   Subclass  World
public          Y         Y         Y         Y
protected       Y         Y         Y         N
no modifier     Y         Y         N         N
private         Y         N         N         N

이런 것을 원할 때 전형적인 경우는 추상 클래스를 만들 때입니다. 때로는 추상적 인 부모가 특정 구성원에 대한 액세스 권한이 필요하다는 것을 알지만 구체적인 자녀도 마찬가지입니다. 멤버를 만들어서이 액세스 권한을 부여 할 수 protected있지만, 실제로 원하지 않을 때 나머지 패키지에 대한 액세스 가능성이 열립니다.

완전히 명확하게 말하자면 Java 에서는 이러한 수정자가 불가능 하다는 것을 알고 있습니다. 내 질문은 왜 그러한 수정자가 Java에 포함되지 않습니까? (나에게) 어느 쪽이나 protected기본값 보다 더 자연스러운 가시성 수준 인 것 같습니다 . 그 이유가 포함하기에 충분히 중요하지 않거나 내가 고려하지 않은 가능한 부작용과 더 관련이 있습니까?


비선형 액세스 계층 구조를 사용하여 추가 된 복잡성을 피하고 싶다고 생각합니다.

패키지를 제어 할 수 있어야하므로 여기에서 이러한 보호 된 메서드를 호출하지 마십시오.

(그런데, protected같은 아주 동일하지 sub-class and package않은 정적 (같은 패키지에없는 경우) 방법을 보호 선언 클래스의 임의의 객체에 호출 할 수 없습니다,하지만 코드에 서브 클래스의 개체로, . (이는에서 볼 수 있으며 Object.clone()개체가 복제되는 클래스에서만 호출 할 수 있습니다.)


분명히 그들은 같은 패키지에있는 것과 같이 "가까운 관계" 아닌 하위 유형 이라고 생각 합니다. 그리고 당신이 제안한 수정 자의 경우, 하위 클래스가 실제로 다른 패키지에 있지 않는 한 크게 다르지 않을 것입니다. 그리고 동일한 패키지에있는 것이 하나의 하위 클래스가되는 것보다 더 가까운 관계로 간주되어야한다고 주장합니다. 완전히 다른 패키지.protected


클래스를 자체 패키지에 넣고 멤버 (인스턴스 변수 또는 메서드)를 보호 된 것으로 표시해야합니다. 이렇게하면 하위 클래스를 제외한 다른 클래스는 보호 된 것으로 마케팅하는 해당 멤버에 액세스 할 수 없습니다. 보호 된 멤버에 액세스하기 위해 하위 클래스 만 필사적으로 원하는 경우 하나의 패키지에 하나의 클래스로 끝납니다.

참고 URL : https://stackoverflow.com/questions/5300163/why-is-there-no-sub-class-visibility-modifier-in-java

반응형