2014-10-14 1 views
2

두 프로그램 아래의 출력을 실행하십시오 ...아래 두 프로그램이 개념적으로 다른 출력을 제공하는 이유는 무엇입니까?

Program_1 :

package p1; 

class x { 
    public void methodA() { 
     System.out.println("Methos A of Class X"); 

    } 
} 

class y extends x { 
    public void methodA() { 
     System.out.println("Method A of Class Y"); 
    } 
} 

class Override1 { 
    public static void main(String[] args) { 
     x obj1 = new x(); 
     x obj2 = new y(); 
     y obj3 = new y(); 
     /* y obj4 = new x(); */ 

     obj1.methodA(); 
     obj2.methodA(); 
     obj3.methodA(); 
     /* obj4.methodA(); */ 
    } 
} 

Program_2 :

class x { 
    int a[] = new int[2]; 

    x() { 
     a[0] = 10; 
     a[1] = 20; 
    } 

} 

class y extends x { 
    int a[] = new int[10]; 

    y() { 
     a[0] = 12000; 
     a[1] = 1000; 
     a[2] = 120; 
    } 

} 

class Override2 { 
    public static void main(String[] args) { 
     x obj1 = new x(); 
     x obj2 = new y(); 
     // y obj3 = new x(); 
     y obj4 = new y(); 
     System.out.println(obj1.a[1]); 
     System.out.println(obj2.a[1]); 
     System.out.println(obj4.a[1]); 

    } 
} 

내 특정 질문은 Program_1에서 어떤 방법으로 그 MethodA class Y 전화가? 그리고 program_2에서 무엇을 의미합니까? '20'(a [1])입니다. 클래스 X이 호출됩니까?

메모리 할당 및 참조 지정과 관련된 객체 생성에 대한 기본 개념을 분명히하십시오.

+3

:

두 번째 예는 동일하다? – DeepInJava

+0

자바에서 변수를 오버라이드 할 수는 없지만 메소드를 오버라이드 할 수 있습니다. –

+0

보다 구체적인 질문이 필요합니다. * 메모리 할당 및 참조 할당과 관련된 객체 생성에 대한 기본 개념을 삭제하십시오. – TheLostMind

답변

1

짧은 대답은 Java에서 데이터 다형성이 없다는 것입니다.

첫 번째 예에서 methodA은 다른 클래스로 구현 된 동일한 메소드입니다.

두 번째 예에서 두 개의 a은 완전히 별개의 관련없는 데이터 멤버입니다 (이름과 데이터 유형이 동일하더라도). 당신은뿐만 아니라 출력을 제공하시기 바랍니다 수

class x { 
    int a_x[] = new int[2]; 
    x() { 
     a_x[0] = 10; a_x[1] = 20; 
    } 

} 
class y extends x { 
    int a_y[] = new int[10]; 
    y() { 
     a_y[0] = 12000; a_y[1] = 1000; a_y[2] = 120; 
    } 
} 

class Override2 { 
    public static void main(String[] args) { 
     x obj1 = new x(); 
     x obj2 = new y(); 
     y obj4 = new y(); 
     System.out.println(obj1.a_x[1]); 
     System.out.println(obj2.a_x[1]); 
     System.out.println(obj4.a_y[1]); 
    } 
} 
+0

got it.variable은 대괄호를 닫을 때 범위를 벗어납니다 ... 그래서 같은 변수 이름을 가졌지 만 다른 변수는 다른 속성을 갖습니다 ... 그러나 그 방법은 동일하지 않습니다 ... 좋은 설명 ... 감사합니다 –

0

내 특정 질문은 클래스 Y의 MethodA를 의미하는 Program_1에서 무엇입니까? -> 해당 내용은 동적 전달 메커니즘 (메서드 재정의)입니다. here을 확인하십시오. 여기서는 부모가 동일한 방법을 정의한다면, RHS (인스턴스 유형)의 메소드는 LHS (하위/상위)에 대한 참조와 관계없이 호출됩니다.

X 클래스의 '20'(a [1])을 의미하는 것은 -> 참조 유형에 따라 다릅니다. 참조가 X 인 경우 xfield는 RHS의 irrespctive라고합니다.

관련 문제