2017-04-01 1 views
0

지금 당장은 Java에 익숙해졌습니다. 이 확장 클래스를 OCA 7 서적에서 보았고 Baz 클래스가 go 메소드를 사용하고 리턴 유형 String을 기대할 수 있는지 궁금해했다. 그러나 인수는 int를 취한다. 반환 값은 null입니다.Java 클래스 메소드는 String 타입을 정의하고, int를 param으로 받아 null을 반환합니다.

Baz가 법적 구조입니까? 그렇지 않으면 컴파일 오류가 반환됩니까? 즉, String 유형을 반환하지만 int 인수를 취한 다음 null을 반환합니다. 어떻게 가능합니까? Baz 이후

public class Foo { 
    void go() {} 
} 

public class Baz extends Foo { 
    String go(int x) { 
     return null; 
    } 
} 
+3

'go()'와'go (int)'는 상당히 다른 방법입니다 (https://docs.oracle.com/javase/). 자습서/java/javaOO/methods.html). 그들이 같은 이름을 가지고 있다는 것을 혼동하지 마십시오. 그들의 서명은 다릅니다. – dhke

+0

@dhke 나는 그가 상속을 전혀 염려하지 않는다고 생각한다. 그는 단지'String'을 반환해야 할 때'null'을 반환 할 수 있다는 혼란을 겪고 있습니다. – Gendarme

+0

"Baz가 합법적인가요? 아니면 컴파일 오류가 반환됩니까?" 너 시도 할 때 무슨 일이 있었 니? –

답변

2

Foogo() 방법을 상속 Foo 연장된다.

덧붙여 Bazgo(int x)이라는 고유 한 메서드와 String의 반환 형식을 선언합니다. 이들은 서로 다른 두 가지 메소드이고 컴파일러는 서로 다른 signature (= name + 매개 변수 유형)을 가지고 있기 때문에 컴파일러가이를 처리합니다. 유일한 차이점이 반환 형식이면 컴파일 오류가 발생합니다.

서명이 다르므로 컴파일러는 언제 어떤 메서드를 호출할지 알 수 있습니다.이 경우 go을 호출 할 때 int을 매개 변수로 전달했는지 여부에 따라 다릅니다.

따라서 Baz은 완전히 유효한 Java 클래스입니다.

편집 : go(int x)String이 클래스이므로 null을 반환 할 수 있습니다. 클래스 인스턴스에 대한 참조가 필요할 때 항상 null을 전달/반환 할 수 있습니다. (메소드 매개 변수는 이것이 가능하지 않은 이유는 전혀 중요하지 않습니다.)

+0

예 String을 반환하지만 int 인수를 사용하고 null을 반환합니다. 그게 어떻게 가능할까요? – mdarmanin

+0

@emporio 인수는 반환 유형과 전혀 관련이 없습니다. 논쟁의 유일한 이유는 메소드에 정보를 전달할 수 있다는 것입니다. – Gendarme

+0

@emporio 편집을 통해 해당 부분이 명확하게 설명되어 있습니까? – Keiwan

관련 문제