13

メソッドを持たないtoStringインターフェースの参照変数を使用してメソッドを呼び出すにはどうすればよいですか?TesttoString

interface Test
{
    void show();
    String toHi();
}
class Demo implements Test
{
    public void show(){
        System.out.println("Show");
    }
    public String toString(){
        return "Hello"; 
    }
    public String toHi(){
        return "Hi";    
    }

    public static void main(String[] args) 
    {
        Test t=new Demo();
        String s=t.toString();
        System.out.println(s);
    }
}
4

8 に答える 8

14

Javaドキュメントによると...

When an interface has no direct SuperInterface, it will create abstract public method for all those public methods present in the Object class

toString()これが、インターフェース参照でメソッドを呼び出すことができる理由です。

于 2012-08-25T17:34:11.420 に答える
11

ObjectにはtoString()メソッドがあるため、すべて(プリミティブ型を除く)にtoString()メソッドがあります。Javaは、空のインターフェースであっても、すべてのメソッドを持っているものとして扱いますObject。これは、常にそうするためです。

于 2012-08-25T17:30:27.717 に答える
6

いずれObjectにもtoString()方法があります。インターフェイスを実装するものはすべて暗黙的に拡張されるObjectため、メソッドもありますtoString()

于 2012-08-25T17:30:27.053 に答える
2

クラスCは実装しますが、すべてのオブジェクトが最終的に継承ツリーで行うように、My拡張します。Object

このObjectクラスにはtoString()、他の多くのメソッドとともに、メソッドがあります。

于 2012-08-25T17:30:40.250 に答える
2

classはDemo暗黙的にextendsclassなのでObject、メソッドを継承しtoStringます。また、これはメソッドではないため、のインスタンスを直接呼び出すことはできますがabstract、クラスが実装を提供するように強制されることはありません。詳細については、レッスン:インターフェイスと継承を参照してください。DemotoStringDemo

ObjectAPIで述べられているように、

クラスObjectはクラス階層のルートです。すべて Objectのクラスにはスーパークラスがあります。配列を含むすべてのオブジェクトは、このクラスのメソッドを実装します。

toStringまた、メソッドはインターフェイス定義の一部ではなく、Objectクラス定義の一部であることに注意してください。

于 2012-08-25T17:32:31.903 に答える
2

インターフェイスのその変数を介してそのメソッドを呼び出すことができる理由は、Javaのインターフェイスの場合の特別な処理のためです。

メソッドがインターフェイスで明示的に宣言されていない場合でも、特別な処理により、クラスで定義されているすべてのパブリックインスタンスメソッドの宣言が暗黙的に提供されますObject。そして、そのtoString方法はその1つです。

ただし、クラスを暗黙的に拡張するクラスとは異なり、インターフェイスはスーパーインターフェイス(またはクラス)を暗黙的に拡張しないことに注意してくださいObject

ここでより良い説明が見つかります-インターフェースは本当にJavaのObjectクラスを継承しますか?

于 2012-08-25T17:43:33.667 に答える
1

toStringは。内で宣言されObjectます。実装がインターフェースを実装するとき、Objectそれはメソッドを持たなければなりませんtoString

したがって、オブジェクト参照は、インターフェイスであろうと列挙型であろうと、すべてのオブジェクトメソッドを持っている必要があります。

  • クローン
  • 等しい
  • ファイナライズ
  • getClass
  • ハッシュコード
  • 通知する
  • notifyAll
  • 待つ
于 2012-08-30T15:01:17.943 に答える
0

Javaのすべてのオブジェクト(プリミティブ型を除く)には、toString()メソッドがあります。

于 2012-08-25T17:33:45.120 に答える