byteValue() 및 shortValue()에는 다른 추상 메서드와 달리 구현이 있으며 JDK1.1에 추가 된 것을 알고 있습니다. 이것은 인터페이스라면 불가능했을 것입니다. 그러나 개발자가 Number 클래스를 작성했을 때 그들은 왜 그것을 추상 클래스로 만들었습니까? 나중에 더 많은 방법을 추가 할 것으로 예상했기 때문입니까? 정식 인용에서 지원하는 답변 만 있으면됩니다. 내 질문을 검토하고 답변을 드리는 시간에 많은 분들께 감사드립니다.Java에서 Number 클래스가 Abstract 클래스가 아닌 인터페이스가 아닌 이유는 무엇입니까?
답변
아무도 여기에 디자이너의 마음에 무슨 일이 있었는지 알 수 없다, 그러나 추상 클래스와 인터페이스는 서로 다른 목적을 위해 사용됩니다. (자바)
클래스는 엄격한 계층 구조에서 상속하고,이 계층은 객체의 관련이없는 클래스의 단락 지을 수 있도록하는 데 사용할 수있는 도구입니다. 클래스는 전체 계층 구조의 핵심 기능이 유사 할 때 더욱 논리적입니다.
예를 들어 추상 클래스 Number
및 Letter
을 사용하면 두 클래스를 모두 가질 수 없습니다. 인터페이스를 사용하면 두 가지를 구현하는 클래스를 만들 수 있습니다.
인터페이스는 인터페이스의 지정된 기능 만 사용하는 재사용 가능한 논리로 사용할 수 있도록 공식적인 방법으로 (일반적으로) 작은 조각을 노출하는 데 종종 사용됩니다. 그들은 Serializable
, Comparable
또는 Runnable
과 같은 지원 기능을 추가하는 데 자주 사용됩니다. 그것이 불가능 Comparable
객체가 Printable
을 할 수있을 수 있도록하는 것처럼
예, Printable
및 Comparable
는 끔찍한 추상 클래스가 될 것입니다.
그래서 디자이너는 특히 클래스 중 하나의 계층 구조는 숫자가 될 수 있도록 Number
추상 클래스를 만들기 위해 선택하지 수 있으므로, 아무것도. JDK가 String
에서와 같이 특별한 경우로 이러한 클래스를 처리하는 미래의 최적화가 허용 될 수 있습니다.
"아무도 여기에 디자이너의 마음에 무슨 일이 있었는지 알 수 없습니다"- 그들 중 몇은 지금 여기에 게시 할 예정입니다, 게다가 과거에이 같은 답변은 때때로 그들이 한 목록 대화를 이메일로 인용으로 대답했다. 숫자와 문자 둘 다로 이해하지 못하는 클래스에 대해서'char'는 비슷하게 작동합니다 ('Character'는 그렇지 않지만). 그래서 나는 그것이 합리적이지 않다는 것을 분명히 주장하는 것이 공평하다고 생각하지 않습니다. – yshavit
아마 내가 올바르게 말 할 수 없지만 클래스와 인터페이스를 디자인 할 때 특정 이유로 하나 또는 둘 중 하나를 선택하는 것 같습니다. 나는 여기에 그것들을 요약하려고 노력했다. 볼 수있는 또 다른 좋은 장소는 여기에있을 수 있습니다 : http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo – john16384
- 1. java.io.Serializable이 클래스가 아닌 이유는 무엇입니까?
- 2. 인터페이스가 클래스가 아닌 다른 인터페이스를 상속합니까?
- 3. JavaPOET - 클래스에만 인터페이스가 아닌 수퍼 클래스가 있습니다.
- 4. 이 클래스가 Serializable이 아닌 이유는 무엇입니까?
- 5. String 클래스가 Cloneable이 아닌 이유는 무엇입니까?
- 6. java.sql.Statement가 추상 클래스가 아닌 이유는 무엇입니까?
- 7. SEL이 Objective-C의 클래스가 아닌 이유는 무엇입니까?
- 8. .NET Colors 클래스가 정적이 아닌 이유는 무엇입니까?
- 9. IDisposable이 추상 클래스가 아닌 인터페이스 인 이유는 무엇입니까?
- 10. 클래스가 아닌 인터페이스를 나열하는 이유
- 11. 클래스가 아닌 것은 범위
- 12. UIView 클래스가 아닌 UIActivityIndicator
- 13. EclipseLink의 클래스가 아닌 @AdditionalCriteria
- 14. Number 클래스의 Abstract 메서드
- 15. ProvidersHelper와 비슷한 클래스가 있지만 웹 클래스가 아닌 클래스가 있습니까?
- 16. 인터페이스가 공유되어 있지만 실제 클래스가 아닌 .net 바이너리 seralization의 문제점
- 17. 제네릭 클래스가 아닌 제네릭 사용
- 18. 특정 클래스가 아닌 전체 패키지에 aspectj 적용
- 19. 실제 기본 클래스가 아닌 업 캐스팅
- 20. 클래스가 아닌 단일 인스턴스 Swizzling
- 21. 요소가 특정 클래스가 아닌 경우
- 22. 클래스가 아닌 BroadcastReceiver와의 명시적인 의도
- 23. 'print', 'y'(클래스가 아닌 타입)
- 24. Grails - 추상적 클래스가 아닌 인터페이스
- 25. HttpServletRequestWrapper 클래스가 추상이 아닌 이유
- 26. 인터페이스가 [Serializable]이 아닌 이유는 무엇입니까?
- 27. 제네릭 클래스가 아닌 일반 메서드 재정의
- 28. 일부 API는 주로 클래스가 아닌 인터페이스를 제공하는 이유는 무엇입니까?
- 29. 클래스가 부모 클래스의 "instanceof"가 아닌 이유는 무엇입니까?
- 30. org.eclipse.uml2.uml.Class가 ECore EClass의 하위 클래스가 아닌 이유는 무엇입니까?
그들은 그것을 인터페이스 대신 추상 클래스 만들었을 수도 있지만, 구체적인 클래스는 감각을 만들었하지 않을 것입니다. Java 8 이전에는 인터페이스에 구현을 추가 할 수 없었습니다. –
제안 : 당신은 당신이 권위있는 인용 지원에만 답변을 지정할에 질문을 편집하는 경우 (이메일 목록 등의 언어의 디자이너 토론), 다음을 기반으로 의견으로 닫 투표의 일부를 피할 수 있습니다. – yshavit
@yshavit 의견을 보내 주셔서 감사합니다. – Sandeepy