상위 클래스에 모든 필드가 있는데 하위 클래스에 상속되어야하는 필드가있는 경우 하위 클래스를 상위 클래스에 중첩시키고 필드를 보호하도록하는 것이 좋습니다. 개인적으로 사용하거나 보호 된 접근자를 사용합니까? 아니면 다른 대안?자바로 보호되는 'getters'와 중첩 된 클래스
답변
가장 쉬운 해결책은 수퍼 클래스 필드 또는 인스턴스 변수를 보호하는 것입니다. 그러나 비공개로 만들면 캡쳐의 원칙을 준수하기 때문에 개념적으로 게터와 설정자를 통해 액세스 할 수 있습니다.
가장 간단한 해결책은 필드를 보호하도록하는 것입니다. 그렇지 않으면 강력한 이유가없는 한 그걸로 가십시오.
나는 보호 된 접근자를 사용하는 것이 가장 좋은 방법이라고 생각합니다.
하위 클래스에서 액세스 할 수있게하려면 public 및 protected의 두 가지 옵션 만 남겨 둡니다. 아마도 보호는 당신이 원하는 것일 것입니다. 아래 표는 상속을 위해 java에서 extends
키워드를 사용할 때 적용됩니다.
Access Levels
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
수퍼 클래스에 하위 클래스를 중첩하면 개인용도 사용할 수 있습니다. 이것은 내부 클래스가 부모 클래스의 PART이기 때문에 private 메소드에도 액세스 할 수 있기 때문입니다.
public class Parent {
private int x = 5;
//Not really a subclass
private class NestedClass {
public NestedClass() {
int hax = new Parent().x; // Works!
}
}
//More of a nestedclass than a subclass.
private class SubClass extends Parent {
public SubClass() {
int stillHax = new Parent().x;
}
}
}
당신은 당신이 extends
또는 implements
키워드를 사용할 때까지 당신은 아마 서브 클래스 (다른 파일에) 상위 클래스를 확장을 할 수 있도록 당신이 상속을 사용하지 않고 변수 보호 (또는 공용) 것 레벨 액세스. 동일한 pakage 또는 동일한 클래스에 속하는 것은 그리드에서 prority를 취합니다. 위의 두 예제는 SAME 클래스의 다른 클래스가 부모 클래스와 같기 때문에 작동합니다.
그리드를 따라하면됩니다.
보호 된 필드 또는 보호 된 접근 자 메서드가 노출되는 경우가 있습니다. 그래서 모두 부모 클래스에 대한 디자인에 달려 있으며, 어떻게 하위 클래스가 부모 클래스를 사용하게할까요?
그러나 확실히 그 중 하나입니다. "하위 클래스를 수퍼 클래스에 중첩시키는 것이 더 낫습니다."< - 이것은 거의 올바른 선택이 아닙니다.
고마워, 나는 그것을 명심할 것이다. –
- 1. PHP에서 getters와 setter를 사용해야하나요?
- 2. 중첩 된 클래스, 내부 클래스
- 3. 덜 중첩 된 클래스
- 4. 중첩 된 속성/클래스
- 5. 중첩 된 파생 클래스
- 6. 중첩 된 속성 클래스
- 7. 관리 중첩 된 클래스
- 8. 중첩 된 클래스 C++
- 9. C에서 중첩 된 클래스
- 10. getters와 func getSomething() 사이에 다른가?
- 11. ReportViewer의 중첩 된 매트릭스 (클래스
- 12. 중첩 된 동적 PHP는 클래스
- 13. 중첩 된 클래스 변수 호출
- 14. AStyle 중첩 된 클래스 형식
- 15. 중첩 된 싱글 톤 클래스
- 16. 템플릿 친구와 중첩 된 클래스
- 17. 중첩 된 클래스 템플릿 문제
- 18. 백본 - 중첩 된 클래스 로딩
- 19. Java에서 중첩 된 클래스 목록?
- 20. 자바로 된 간단한 그래픽
- 21. 자바로 릴레이 된 메일
- 22. 자바로 프레임 된 시간
- 23. 중첩 클래스
- 24. Java 중첩 클래스 중첩
- 25. 중첩 클래스
- 26. 보호 된 중첩 클래스에서 상속하는 공용 중첩 클래스? 내 자신의 반복자를 구현하기 위해
- 27. 중첩 클래스 - 부모 클래스에서 중첩 클래스 호출
- 28. . 자바로 - 직렬화 된 XML 작동합니까?
- 29. 중첩 클래스
- 30. CollectionView.CollectionChanged가 보호되는 이유는 무엇입니까?
귀하의 유스 케이스에 크게 달려 있으므로 조금 더 자세히 설명해 주시겠습니까? –
더 나은 것을 정의하십시오. –
필자는 자신의 하위 클래스 (직원 유형) 및 일부 지불/세금 계산 방법 (추상 및 콘크리트)에 공통적 인 많은 데이터를 보유하고있는 수퍼 클래스 (Employee)를 보유하고 있습니다. 하위 클래스는 수퍼 클래스의 필드에서 데이터를 필요로하는 많은 계산을 수행합니다. 이 계열의 외부에서 액세스해야하는 필드는 거의 없습니다. –