2012-09-19 3 views
2

Java의 다른 모든 클래스는 Object 클래스에서 상속됩니다.별도의 Java 클래스 계층 구조 빌드

FastObject 클래스를 기반으로 Java에서 두 번째 완전히 분리 된 클래스 계층 구조를 추가 할 수 있습니까?

저의 원래 목표는 특정 알고리즘을 위해 특별히 설계된 기능이 적은 작고 빠른 개체를 만드는 것이 었습니다. 그러나 이것이 명확한 지, 나는 이것이 "좋은 생각"인지 여부에 관심이 없다. 나는 그것이 가능한지 알고 싶다. 나는 그렇게 할 길을 찾을 수 없었습니다. JVM을 변경해야합니까? 새로운 부트 클래스 패스 기능? 실제 해결책은 Object을 무시하고 java.lang.Class을 대체하는 것입니까? VM 대신 직접 Java 컴파일러를 사용하면 내 일이 더 쉬워 질까요?

분명히 말하면, 루트 Object 클래스를 편집하고 싶지는 않습니다. 이를 위해서는 잠재적으로 전체 Java 라이브러리를 다시 작성해야합니다. 현재 계층 구조를 바꾸고 싶지 않습니다. 동일한 코드에서 사용할 수있는 별도의 구조체를 만들고 싶습니다.

답변

2

아니요, 불가능합니다.

모든 생성 된 클래스는 명시 적으로 또는 암시 적으로 다른 클래스를 확장합니다. 클래스를 생성하고 클래스가 확장하는 클래스를 명시 적으로 정의하면 해당 클래스가 확장됩니다. 그렇지 않으면 암시 적으로 Object까지 확장됩니다. 연산자를 오버로드 할 수있는 방법이 없듯이이 문제를 해결할 방법은 없습니다. 이것은 Java 프로그래밍 언어의 근본적인 설계 결정입니다.

모든 클래스는 Object까지 확장됩니다. 원시 타입이 아닌 유일한 것들. 예외는 물론 자체를 확장하지 않는 Object 자체입니다.

+0

"생성 된 모든 클래스가 명시 적으로 또는 암시 적으로 다른 클래스를 확장합니다"라는 점을 감안할 때,'Object'는 무엇을 확장합니까? 아니면 규칙의 예외입니까? 말도 안되는 사람이되고 싶지 않고 호기심이 많습니다. – chrisbunney

+0

@chrisbunney Object의 주목할만한 예외가 있습니다. – hsanders

+0

하하, touche. 하나만 빼고. :) "만든 클래스"를 "사용자가 만든 사용자 정의, 비 핵심 Java 클래스"로 보려고했지만. – asteri

1

부팅 클래스 경로를 사용하여 자신 만의 Object 구현을 삽입 할 수 있습니다. 그러나 Object 이외의 기본 객체를 사용하는 방법은 없다고 생각합니다. 바이트 코드 조작을 시도해 볼 수도 있지만 수정 된 클래스가 클래스 로더에 의해 거부 될 가능성이 완전히 있습니다.

+1

이것은 "현재 계층 구조를 바꾸는 것"이며, OP는 자신이 원하지 않는다고 말했습니다. 그는 동시에 둘 다 사용할 수 있기를 원합니다. 그러나 이것은 정말로 흥미 롭습니다. 나는 이것을 여가 시간에 시험해보고 그것이 어떻게 진행되는지 볼지도 모른다. :) – asteri

+0

@ 제프 - 예, 제가 제안한 것이 OP가 원하는 것과 정확히 일치하지 않는다는 것을 알고 있습니다. 나는 내 대답에서 많이 말했다. – jtahlborn

관련 문제