2016-09-28 5 views
-1

Test.javaSuperClass의 의미는 무엇입니까? s = new SubClass();

public class Test { 

    public void go(){  
     System.out.println("Test go"); 
    } 
} 

Test2.java

public class Test2 extends Test { 
public void go(){  
    System.out.println("Test 2 go"); 
} 

public void back(){ 
    System.out.println("Test 2 back"); 
    } 
} 

class Demo{ 

    public static void main(String[] args) { 

    Test t=new Test2(); 
    t.go(); // Output : "Test 2 go" 
    t.back(); //Compile time error. 
} 

} 

나는이에 대한 유래에 대한 몇 가지 문제를 읽을 수 있지만 나는 SuperClass s=new SubClass();의 의미를 이해하지 않았다. 또한 Object of Test가 go() Test2의 메서드에 액세스 할 수있는 경우 출력에서 ​​back() 메서드에 액세스 할 수없는 이유는 무엇입니까?

+0

페이지를 읽어야 Test2에서 go() 메소드를 호출하여 런타임에 Test2 객체를 생성 : https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html –

답변

0

이것은 다형성의 예입니다. 즉, 을 의미합니다. 우리는 수퍼 유형의 참조를 사용하여 서브 유형 객체를 참조 할 수 있습니다.

back() 유형은 Test 유형에 대해 정의되지 않습니다. 유효한 Test 유형 변수에서 back() 메서드를 호출하고 있습니다. 당신은 당신은 유형 Test

  • 당신은 다형성 참조를 사용 유형 Test2의 인 객체를 참조하는의 참조 변수 t를 만드는

    Test t = new Test2(); 
    
    • 를 선언합니다.

    또한 그것은 다시() 메소드에 액세스 할 수없는 이유 테스트의 목적은 다음 Test2를의 이동() 메소드에 액세스 할 수 있는지 출력한다. t으로

    유형 Test입니다, 그것은 단지 Test 클래스에 정의 방법에 대해 알 수 있습니다. 그것은

    • 당신이 호출되고 Test 클래스에서 go() 방법을 생각 컴파일러에서 t.go() 말할 때, 서브 클래스의 코멘트에있는 당신의 질문에 대해서는 Test2

      에 정의 된 방법에 대해 알 수 없다. 컴파일시에 어떤 객체가 생성 될지 알 수 없다.

    • 귀하의 선언 Test t = new Test2();Test

    에서 go()을 무시하기 때문에 결과적으로 당신은 정말 또한 공식 언어 튜토리얼에 대한 compile time polymorphismruntime polymorphism

  • +0

    "Test2 하위 클래스에 정의 된 메소드를 알 수없는 경우"t.go()의 출력이 " 시험 가라 "는 뜻대로된다. ld Test에서 go() 메소드를 호출한다. Test2의 go() 메소드를 호출하는 이유는 무엇입니까? –

    +0

    @AshrafMulla prasad는 설명 할 유효한 이유를주었습니다. 원하는 경우 읽기 용으로 내 대답을 시도해 볼 수 있습니다. –

    +1

    예 @PavneetSingh이 질문은 부모의 설명 때문에 마음에 떠 올랐습니다. "부모 참조 변수가 참조를 보유 할 수있는 다형성 문입니다. 자식 개체."Prasad Khamkar의"Test2 하위 클래스에 정의 된 메소드에 대해서는 알 수 없습니다 "이제 다형성의 과정을 이해했습니다. 매우 감사합니다. –