2017-03-20 1 views
4

byteValue() 및 shortValue()에는 다른 추상 메서드와 달리 구현이 있으며 JDK1.1에 추가 된 것을 알고 있습니다. 이것은 인터페이스라면 불가능했을 것입니다. 그러나 개발자가 Number 클래스를 작성했을 때 그들은 왜 그것을 추상 클래스로 만들었습니까? 나중에 더 많은 방법을 추가 할 것으로 예상했기 때문입니까? 정식 인용에서 지원하는 답변 만 있으면됩니다. 내 질문을 검토하고 답변을 드리는 시간에 많은 분들께 감사드립니다.Java에서 Number 클래스가 Abstract 클래스가 아닌 인터페이스가 아닌 이유는 무엇입니까?

+2

그들은 그것을 인터페이스 대신 추상 클래스 만들었을 수도 있지만, 구체적인 클래스는 감각을 만들었하지 않을 것입니다. Java 8 이전에는 인터페이스에 구현을 추가 할 수 없었습니다. –

+1

제안 : 당신은 당신이 권위있는 인용 지원에만 답변을 지정할에 질문을 편집하는 경우 (이메일 목록 등의 언어의 디자이너 토론), 다음을 기반으로 의견으로 닫 투표의 일부를 피할 수 있습니다. – yshavit

+0

@yshavit 의견을 보내 주셔서 감사합니다. – Sandeepy

답변

1

아무도 여기에 디자이너의 마음에 무슨 일이 있었는지 알 수 없다, 그러나 추상 클래스와 인터페이스는 서로 다른 목적을 위해 사용됩니다. (자바)

클래스는 엄격한 계층 구조에서 상속하고,이 계층은 객체의 관련이없는 클래스의 단락 지을 수 있도록하는 데 사용할 수있는 도구입니다. 클래스는 전체 계층 구조의 핵심 기능이 유사 할 때 더욱 논리적입니다.

예를 들어 추상 클래스 NumberLetter을 사용하면 두 클래스를 모두 가질 수 없습니다. 인터페이스를 사용하면 두 가지를 구현하는 클래스를 만들 수 있습니다.

인터페이스는 인터페이스의 지정된 기능 만 사용하는 재사용 가능한 논리로 사용할 수 있도록 공식적인 방법으로 (일반적으로) 작은 조각을 노출하는 데 종종 사용됩니다. 그들은 Serializable, Comparable 또는 Runnable과 같은 지원 기능을 추가하는 데 자주 사용됩니다. 그것이 불가능 Comparable 객체가 Printable을 할 수있을 수 있도록하는 것처럼

예, PrintableComparable는 끔찍한 추상 클래스가 될 것입니다.

그래서 디자이너는 특히 클래스 중 하나의 계층 구조는 숫자가 될 수 있도록 Number 추상 클래스를 만들기 위해 선택하지 수 있으므로, 아무것도. JDK가 String에서와 같이 특별한 경우로 이러한 클래스를 처리하는 미래의 최적화가 허용 될 수 있습니다.

+1

"아무도 여기에 디자이너의 마음에 무슨 일이 있었는지 알 수 없습니다"- 그들 중 몇은 지금 여기에 게시 할 예정입니다, 게다가 과거에이 같은 답변은 때때로 그들이 한 목록 대화를 이메일로 인용으로 대답했다. 숫자와 문자 둘 다로 이해하지 못하는 클래스에 대해서'char'는 비슷하게 작동합니다 ('Character'는 그렇지 않지만). 그래서 나는 그것이 합리적이지 않다는 것을 분명히 주장하는 것이 공평하다고 생각하지 않습니다. – yshavit

+0

아마 내가 올바르게 말 할 수 없지만 클래스와 인터페이스를 디자인 할 때 특정 이유로 하나 또는 둘 중 하나를 선택하는 것 같습니다. 나는 여기에 그것들을 요약하려고 노력했다. 볼 수있는 또 다른 좋은 장소는 여기에있을 수 있습니다 : http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo – john16384

관련 문제