Java의 Object class에 clone()
및 finalize()
과 같은 보호 된 메서드가 포함되어있는 이유는 무엇입니까? 사용하거나 작성하는 모든 클래스가 Object?Java의 Object 클래스에 보호 된 메서드가 포함되어있는 이유는 무엇입니까?
답변
클래스 C2
이 C1
확장하고 C1
는 public
방법, C2
(오버라이드 (override)하는 경우)도 public
이어야에서 다음 방법을 포함하는 경우; Java는 재정의 할 때 메서드의 액세스에 대한 추가 제한을 두는 것을 불법으로 만듭니다. C1
에 protected
메서드가 포함 된 경우 C2
의 재정의 메서드는 protected
또는 public
일 수 있습니다.
C1
이 Object
클래스 인 경우에도이 규칙이 적용됩니다. 그 이유는 클래스가 (Object
에서 상속받은) clone
및 finalize
메서드를 우선하여 선언하고 public
대신에 protected
을 선택할 수 있도록하는 것이라고 생각합니다.
편집 :이의 중요한 결과는 clone
및 finalize
이 같은 자유롭게 액세스 할 수있는 공용 멤버가 될 것 같은 아니라는 것이다. C2
내에서 C2
유형의 객체에 clone
및 finalize
을 사용할 수 있습니다. 보호 유형이므로 C2
하위 클래스에서 사용할 수 있기 때문입니다. 그러나 반드시 다른 클래스의 객체에서 사용할 수는 없습니다.
class X { }
class Y {
private Y field1;
private X field2;
public void foo() throws Exception {
Object o1 = this.clone(); // legal
Object o2 = field1.clone(); // legal
Object o3 = field2.clone(); // illegal
String s1 = field2.toString(); // legal since toString() is "public" in Object
}
}
이 protected
방법이 서브 클래스에 접근 할 수 있지만, 그들이 얼마나 접근에 대한 몇 가지 제한 사항이 여전히 있다는 것을 증명해야한다. X
에 @Override public Object clone()
메소드가있는 경우 o3
의 선언이 합법적이됩니다.
일반적인 추상 Object
의 경우 사용자가 clone
또는 finalize
을 원할 경우 수행 할 작업이 명확하지 않기 때문에이 작업이 수행됩니다. 이것이 우리가이 방법을 무시하고 자체적으로 구현할 수있는 기회입니다.
Object
에는 두 개의 protected
메서드가 있습니다. clone()
및 finalize()
입니다.
finalize()
은 클라이언트 코드에 의해 호출되도록 의도되었지만 서브 클래스에 의해 무시 될 수 있습니다. 따라서 보호됩니다.
clone()
Object
은 명시 적으로 재정의되고 서브 클래스별로 public
이 작성되지 않는 한 클라이언트에서 호출하지 않습니다.
Object 클래스에는 protected 한정자를 사용하여 finalize() 및 clone() 메서드가 포함되어 있으므로 개발자가 이러한 메서드를 protected 또는 public 한정자로 재정의 할 수 있는지 여부를 결정할 수 있습니다. 클라이언트 코드를 허용 할 것인지에 따라 완전히 달라집니다. 이 메소드를 호출할지 말지를 결정합니다.
- 1. Java의 보호 된 클래스 구조?
- 2. MessageBox 클래스에 지오메트리가없는 메서드가 표시되는 이유는 무엇입니까?
- 3. Object 클래스에 Thread 메서드가있는 이유는 무엇입니까?
- 4. 클래스에 구현 된 C# 인터페이스 메서드가 공개되어야하는 이유는 무엇입니까?
- 5. Object [] [] Java의 링크 된 컬렉션
- 6. SatisfyImportsOnce 메서드가 object 매개 변수와 함께 작동하지 않는 이유는 무엇입니까?
- 7. Java의 다른 패키지로부터 보호 된 액세스
- 8. 보호 된 필드가 하위 클래스에 표시되지 않습니다.
- 9. java의 요소 배열에서 내 toString 메서드가 null을 반환하는 이유는 무엇입니까?
- 10. Java의 Object 클래스 란 무엇입니까?
- 11. 컬렉션의 메서드가 AbstractCollection에없는 이유는 무엇입니까?
- 12. Object [object Object]에는 메서드가 없습니다. surroundSelectedText
- 13. jquery progressbar에서 다음 오류가 발생하는 이유는 무엇입니까? Object [object Object]에 'progressbar'라는 메서드가 없습니다?
- 14. get_object_vars가 보호 된 속성을 반환하는 이유는 무엇입니까?
- 15. Java의 내부 클래스에 열거 형을 만들 수없는 이유는 무엇입니까?
- 16. `Return` 메서드가 보호 된 함수에서 작동하지 않습니다.
- 17. GetHashCode가 Object 클래스에있는 이유는 무엇입니까?
- 18. DataGridViewRowCollection.DataGridView 속성이 보호 된 이유는 무엇입니까?
- 19. java의 'final'한정자 클래스에 액세스
- 20. Java의 Pattern 및 Matcher 클래스에 public 생성자가없는 이유는 무엇입니까?
- 21. 배열의 메서드가 정적 (Java)이어야하는 이유는 무엇입니까?
- 22. 조롱 된 메서드가 예외를 삼키는 이유는 무엇입니까?
- 23. 스텁 된 메서드가 호출되지 않는 이유는 무엇입니까?
- 24. 로드 된 메서드가 무시되는 이유는 무엇입니까?
- 25. 이 재정의 된 메서드가 호출되는 이유는 무엇입니까?
- 26. 파생 된 클래스에 대한 포인터를 사용하여 보호 된 기본 클래스 멤버에 액세스 할 수없는 이유는 무엇입니까?
- 27. Object java의 다양한 객체
- 28. TypeError : Object [object Array] 메서드가 없습니다. 'getProperty'
- 29. JavaScript : Object [object global]에는 메서드가 없습니다.
- 30. Object [object Object]에 메서드가 없습니다 - jQuery 오류
그래서 파생 클래스는 공개되지 않고 상속합니다. –
'protected' 멤버는 같은 패키지 또는 하위 클래스의 클래스에서만 볼 수 있습니다. 귀하의 질문을 명확히하십시오. –
OOP에서 상속을 위해 설계된 경우 public 메서드보다 protected가 바람직합니다. – Braj