2012-08-08 3 views
1

내 코드인스턴스화이 자바 코드에서 어떤 일이 일어나고 어떻게

class Alpha 
{ 
public void foo() 
    { 
    System.out.print("Alpha "); 
    } 
} 

class Beta extends Alpha 
{ 
public void foo() 
    { 
    System.out.print("Beta "); 
    } 

public static void main(String[]args) 
    { 
    Alpha a = new Beta(); 
    Beta b = (Beta)a; 

    a.foo(); 
    b.foo(); 
    } 
} 

출력입니다 : -

Beta Beta 

내가 자바에 새로운 오전과 내가 처음에 대해 건너 한 인스턴스의 종류 출력이

Alpha Beta 

없는 이유 '는이'클래스 알파의 객체가 있다면 내가 할 수없는 나는 왜 시간과 그게 전부는 이해하기 Alpha의 메소드가 호출되는 이유는 무엇입니까?

도와주세요.

답변

1

생성 된 개체는 Beta 유형이므로 new으로 생성되었습니다. 따라서 foo()을 호출하면 Beta 개체에서 코드에서 "호출"해도 상관 없습니다.

+0

하지만 'b'가 인스턴스화 된 줄은 무엇을 의미합니까? –

+0

메모리의 객체에 대한 참조라고 생각하십시오. 실제로 하나의 실제 객체를 만들었을뿐입니다.이 객체는'new'로 발생했습니다. 'Beta b = (Beta) a;'를 주면,'a '와 같은 것을 가리키는 새로운'Beta' 변수가 생깁니다. 모든 Object 변수는 실제로는 참조 일 뿐이므로 두 개의 다른 객체가 필요하면 명시 적으로해야합니다. – Carl

+0

그래서이 경우 'b'는 'a'가 이미 존재할 때 실제로 사용하지 않습니다 ... 맞습니까? –

1

Object를 슈퍼 클래스로 캐스팅하거나 참조해도 메서드가 언로드되지 않습니다. foo() 메서드는 Beta 개체에서 계속 호출됩니다. 원래이 개체를 Alpha 개체로 참조하는 경우에도 마찬가지입니다.

+0

하지만 'b'가 인스턴스화 된 줄은 무엇을 의미합니까? –

+0

@HimanshuAggarwal'b'가 인스턴스화되지 않았으므로 'a'(알파 오브젝트로 참조되는 베타 오브젝트)를 베타 오브젝트로 캐스팅하여 베타 오브젝트로 참조되도록합니다. –

0

부모 클래스 변수가 자식 클래스 개체를 참조하는 경우 참조에서 자식 메서드가 호출됩니다.

0

Beta 유형의 개체가 하나뿐입니다. 오브젝트를 캐스트해도, java가 친 메소드를 사용하는 것은 아닙니다.

0

Java에서 메소드는 기본적으로 가상입니다. 실제로 호출 할 메소드를 결정할 때, 객체에 대한 참조의 유형이 아닌 기본 객체의 유형이 중요합니다.

관련 문제