2017-04-01 6 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拡張します。

さらに、Bazは、戻りタイプがStringgo(int x)という独自のメソッドを宣言します。これらは2つの異なるメソッドであり、コンパイラは異なるsignature(= name +パラメータ型)を持つため、それらをそのまま扱います。唯一の違いが戻り値の型だった場合、コンパイルエラーが発生します。

シグネチャが異なるため、コンパイラはどのメソッドを呼び出すかを常に指示できます。この場合は、goを呼び出すときにintをパラメータとして渡すかどうかによって異なります。

これは、Bazが完全に有効なJavaクラスである理由です。

編集:go(int x)は、Stringがクラスであるため、nullを返すことができます。 nullは、クラスのインスタンスへの参照が予想される場合にはいつでも渡すことができます。 (メソッドのパラメータは、これがなぜ可能なのかはまったく問題ありません)

+0

はい、文字列型を返すことを意図していますが、int引数をとり、nullを返します。どうすればそれが可能ですか? – mdarmanin

+0

@emporio引数は戻り値の型とはまったく関係ありません。議論の唯一の理由は、あなたが何をしているかにかかわらず、メソッドに情報を渡すことができることです。 – Gendarme

+0

@emporio編集でその部分が明確になっていますか? – Keiwan

関連する問題