2017-12-10 10 views
1
public class HelloWorld 
{ 
    protected int num = 12; 

    public void callme() 
    { 
    System.out.print(this.num); 
    } 

    public static void main(String[] args) 
    { 
    HelloWorld myObject1 = new HelloWorld(); 
    myObject1.callme(); 
    OtherClass myObject2 = new OtherClass(); 
    myObject2.callme(); 
    } 
} 


public class OtherClass extends HelloWorld 
{ 
    protected int num = 14; 
} 

출력이 "1214"대신 "1212"인 이유는 무엇입니까? PHP는 "1214"이지만 자바에서는 그렇지 않습니다. 그 뒤에있는 논리는 무엇입니까?하위 클래스 java에서 같은 이름의 속성

+2

이것은 PHP와 어떤 관련이 있습니까? PHP 태그가 필요한 이유는 무엇입니까? –

+1

가능한 복제본 https://stackoverflow.com/questions/12589274/slight-confusion-regarding-overriding-where-variables-are-concerned – vinS

+0

@Schwesi이 것은 pass-by-reference와 pass-by- 값. 이것은 들판에 숨어있는 것입니다. –

답변

3

callme() 메서드는 기본 클래스에만 정의되어 있으므로 return this.num;은 기본 클래스의 인스턴스 변수를 반환합니다.

Java에서 인스턴스 변수가 무시되지 않습니다.

당신이 OtherClass

public void callme() 
{ 
    System.out.print(this.num); 
} 

을 추가하여 하위 클래스의 메소드를 오버라이드 (override) 싶다면, myObject2.callme(); 그것은 하위 클래스의 callme() 방법을 실행하기 때문에, 14를 반환, 따라서 액세스 할 하위 클래스 인스턴스 변수