1

そこで、Android 開発に関するチュートリアルを読んでいて、Java 開発 (主に学業) 中に見たことのないものに出くわしました。

Thread th = new Thread() { 
    public void run() {
        if (iotdHandler == null) {
            iotdHandler = new IotdHandler(); 
        }
        iotdHandler.processFeed(); resetDisplay(
        iotdHandler.getTitle(), 
        iotdHandler.getDate(),
        iotdHandler.getUrl(),
        iotdHandler.getDescription());
        dialog.dismiss();
    }
};
th.start();

現在、本にはスレッドの拡張と書かれており、ある意味でそれが何をしているのかはある程度理解できますが、Javaで通常のクラスを拡張する通常の方法には従いません。

public Class Dog extends Animal...

その後、メソッドなどをフォローしてオーバーライドできます。しかし、私の質問は、新しい Thread オブジェクトへの参照を作成する際に実際に何をしているのか、同時にその直後にメソッドを作成しているのか、そして Thread クラスのある種のメソッドをオーバーライドしていると思いますか? なんという名前か分からないので、なかなか調べられないので、もしそうだったら当たり前の質問で申し訳ありません。どんな助けでも大歓迎です。

4

2 に答える 2

4

Javaブックを改訂します:)これは匿名内部クラスと呼ばれ、元々はJava GUI開発(AWT / Swingを使用)を容易にするために導入されました。Android UIの開発は同じパターンの多くに従うため、Androidでは非常に頻繁に使用されます。

それが行うことは、クラスをインプレースでインスタンス化し(別のファイルなどで定義せずに)、そのメソッドの一部をオーバーライドします(この場合run())。すべてのメソッドの実装を提供することにより、これによってインターフェースを実装することもできます。

于 2012-05-14T07:51:57.743 に答える
0

まず第一に、それはAndroid固有のものではありません。「通常のJava」でも同じように拡張できます。このようにクラス拡張を行う理由は、この「クラス拡張」が1回だけ必要な場合に、クラスを減らすためです。あなたの例では、書くのは同じでしょう

public class MyThread extends Thread
{
   @Override
   public void run() {
   [...]
   } 
};

以降:

MyThread thread = new MyThread();
thread.start();

したがって、利点は、クラスを実装して後でインスタンス化する必要がないことです。

于 2012-05-14T07:52:58.867 に答える