2012-05-14 8 views
1

は、だから私は、Android開発のチュートリアルを読んでいる、と私はJavaの開発(主に学校の仕事)の間に見たことがない何かに遭遇していますAndroid開発を通じてクラスを拡張するさまざまな方法はありますか?

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(); 

でのご予約は、スレッドを拡張言うと、I種類のそのは意味では、やって何を理解し、それはそうのようなJavaで通常のクラスを拡張する通常の方法に従っていません。

public Class Dog extends Animal... 

をして、あなたは上従う方法及びそのように上書きすることができます。しかし、私の質問は、新しいThreadオブジェクトへの参照を実際に行っているのですが、同時にメソッドを作成すると同時に、Threadクラスのメソッドをオーバーライドしていると思いますか?私はそれが何であるか分からないので、私は本当にそれを検索することはできませんので、それが明白な質問のために謝罪します。どんな助けでも大歓迎です。

+1

これは匿名クラスと呼ばれています。http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html –

+1

Googleで「匿名の内部クラス」を検索します。それがあなたが見ているものです。 – rekaszeru

答えて

4

これはanonymous inner classと呼ばれ、もともとはJava GUIの開発(AWT/Swing)を容易にするために導入されました。 Android UIの開発は同じパターンの多くに従っているため、Androidではかなり頻繁に使用されています。

クラスのインスタンス化は、別のファイルなどで定義しなくても、そのメソッドの一部をオーバーライドします(この場合はrun())。また、すべてのメソッドの実装を提供する場合には、これを使用してインタフェースを実装することもできます。

+0

ああ、ありがとう!私はそれを使用したことはないので、内部クラスを使用するそのメソッドをどのように検索するか分かりませんでした。どうもありがとうございました。 – Andy

0

まず、Android固有のものは何もありません。 「通常のJava」では、同じ方法で拡張できます。このような "クラス拡張"が一度だけ必要な場合、クラスを行う理由は、クラスを減らすように拡張されます。あなたの例では、上の

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

、後で書くことと同じになります:

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

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

関連する問題