2011-04-18 1 views
3

Number 클래스가 Double, Int, Long 및 Float에 대한 변환 메서드에 대한 추상 메서드를 제공하지만 바이트 및 단조에 대한 추상 메서드는 제공하지 않는 이유는 무엇입니까?Number 클래스의 Abstract 메서드

전반적으로 나는 자바를 배우기 시작하면서 추상적 인 방법을 언제 사용하는지 혼란 스럽다.

누구나 제공 할 수있는 통찰력에 감사드립니다. 그들을 위해 소스에서

답변

4

한 모습 말한다 이유 :

public byte byteValue() { 
    return (byte)intValue(); 
} 

public short shortValue() { 
    return (short)intValue(); 
} 

그들은 모두 intValue() 정의 할 것이라는 사실에 의존하고, 단지 그들이 그 제공 무엇이든 사용할 수 있습니다.

이 같은 규칙을 적용하기 때문에 그들은 단지

public int intValue() { 
    return (int)longValue(); 
} 

을하지 않는 이유 궁금한데.

어쨌든 이러한 방법을 무시할 수 없다는 것은 아무것도 없습니다. 그것들을 오버라이드 (override)하기 위해 당신이 추상적 일 필요는 없습니다. 내 컴퓨터에

결과 :

C:\Documents and Settings\glow\My Documents>java SizeTest 
int: 45069467 
short: 45069467 
byte: 90443706 
long: 11303499 

C:\Documents and Settings\glow\My Documents> 

등급 :

class SizeTest { 

    /** 
    * For each primitive type int, short, byte and long, 
    * attempt to make an array as large as you can until 
    * running out of memory. Start with an array of 10000, 
    * and increase capacity by 1% until it throws an error. 
    * Catch the error and print the size. 
    */  
    public static void main(String[] args) { 
     int len = 10000; 
     final double inc = 1.01; 
     try { 
      while(true) { 
       len = (int)(len * inc); 
       int[] arr = new int[len]; 
      } 
     } catch(Throwable t) { 
      System.out.println("int: " + len); 
     } 

     len = 10000; 
     try { 
      while(true) { 
       len = (int)(len * inc); 
       short[] arr = new short[len]; 
      } 
     } catch(Throwable t) { 
      System.out.println("short: " + len); 
     } 


     len = 10000; 
     try { 
      while(true) { 
       len = (int)(len * inc); 
       byte[] arr = new byte[len]; 
      } 
     } catch(Throwable t) { 
      System.out.println("byte: " + len); 
     } 

     len = 10000; 
     try { 
      while(true) { 
       len = (int)(len * inc); 
       long[] arr = new long[len]; 
      } 
     } catch(Throwable t) { 
      System.out.println("long: " + len); 
     } 
    } 
} 
+0

덕분에,이 도움이됩니다. 이것은 아마도 바보 같은 질문 일 뿐이지 만 Java API의 소스 코드를 정확히 보는 방법은 무엇입니까? – Matt

+0

Number 클래스는 Java 1.1로 거슬러 올라갑니다. 그래서 그들이 원하는 것을 매우 명확하게 생각했다고 가정하지 않습니다. 그러나 Java에서 long 및 int는 다르게 동작하지만 바이트, short는 32 비트 공간에서 여전히 처리된다는 점을 기억하십시오. –

+0

@ Kevin, re : Java 소스 코드 - jdocs.com을 사용하는 것을 좋아합니다. 예 : http://www.jdocs.com/harmony/5.M5/java/lang/Number.html –