2016-07-04 4 views
-5

クラスのtoString()メソッドがオーバーライドされていない(またはオーバーロードされていない)場合、クラス内に文字列を返す別のメソッドが定義されている場合、文字列が期待されるクラスの?オーバーライドされていない場合のオブジェクトのtoString()動作

+1

お試しください。シンプルで簡単なテストです。それ以外の場合は、ドキュメントをお読みください。 –

+1

真剣に:簡単にテストできるものについては質問を書いてはいけません。良いプログラマの中核的な特質の1つは好奇心です。これは好奇心のようなものです。他の人にそのような基本的なことを尋ねるのではなく、それを**行うことでプログラミングを学びます。 – GhostCat

+0

私はラップトップとJavaコンパイラを搭載したコンピュータなしでホステルにいます。本から孤立してJavaを学んでいます – karthikeyan

答えて

1

クラスがObjectの場合は、結果はObject#toString()となり、これが呼び出されます。あなたのクラスが他のものを拡張している場合は、継承パスに最初に#toStringが追加されます。

+2

Better .... toString()を定義する最初の親クラス –

+0

文字列を返すメソッドが返した文字列ではありません – karthikeyan

+0

正しい答えをダウンボールドしないでください。答えは更新され、正式に正しかった。 –

0

Stringが必要なクラスの名前を使用することはできません。 )(デフォルト.toStringを継承しますFooクラスの.toString()メソッドがオーバーライドされていないので、

class Foo {} 

class Bar { 
    public void baz(String a) { 

    } 

    public void binky() { 
    Foo b = new Foo(); 
    baz(b.toString()); 
    } 
} 

を:あなたは次の操作を行うことができ、しかし

class Foo {} 

class Bar { 
    public void baz(String a) { 
    // Do something 
    } 

    public void binky() { 
    baz(Foo); // Compiler error 
    } 
} 

:次のことを考えてみましょうObjectクラスから取得します。このデフォルトの動作では、オブジェクトがインスタンスであるクラスの名前、アットマーク文字@ '、およびオブジェクトのハッシュコードの符号なし16進表現からなる文字列が出力されます。 (Thanks Kevin!)

+0

'ObjectクラスのtoStringメソッドは、オブジェクトがインスタンスであるクラスの名前、アットマーク文字@、およびオブジェクトのハッシュコードの符号なし16進表現からなる文字列を返します。メモリアドレスではありません。 'toString'のドキュメントを参照してください。 – SomeJavaGuy

0

面白い事実:これは、スタックオーバーフローに関する質問をして回答を得るよりも時間がかかりません。

あなたが知っているとおり、直接または間接的に作成するすべてのクラスは、全能のObjectクラスから継承します。 toStringを上書きしない場合は、toStringを呼び出すと、最も近い祖先のtoStringメソッドが呼び出されます。 Dから継承Cから継承Bから

と仮定A継承。 CのみがtoStringに上書きされました。

Calling toString on an object of...   will result in calling the toString of... 
A            C 
B            C 
C            C 
D            Object 

ご理解いただければ幸いです。

実際には、toStringはこのように動作するだけでなく、 すべてのメソッドで同様に実行されます。

Object.toStringが呼び出されるようになりました。それは実際に何をしていますか?

[email protected] 

FullyQualifiedNameOfYourClass基本的には、例えばであるパッケージに続いて、あなたのクラス名を、意味:this answerから

、我々はこのようなObject.toString出力の何かがあることを知っていますcom.example.MyClass

12345は、オブジェクトのハッシュコードであり、オブジェクトのhashCode()によって戻されます。

だから、Object.toStringは、文字列を返すクラスのメソッドの1つを呼び出します(宣言した場合)?

いいえ。それはちょうどしないので。 toStringのドキュメントには、[email protected]のようなものだけが返され、それ以外は何も返されないことが明らかです。

たとえしても意味がありません。文字列を返す2つのメソッドを宣言した場合はどうなりますか?どちらを選ぶべきですか?また、リフレクションには時間がかかり、全体を遅くします。

関連する問題