2012-05-14 2 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(); 

Теперь книга говорит простираться нить, и я вида понять, что его делать, в некотором смысле, но не следует обычному способу продлить нормальный класс в Java, как так:

public Class Dog extends Animal... 

, а затем вы можете следовать дальше и переопределить методы и тому подобные. Но мой вопрос в том, что он на самом деле делает при создании ссылки на новый объект Thread, но в то же время создавая метод сразу после него, и что я предполагаю, переопределяет какой-то метод в классе Thread? Поскольку я не знаю, как это называется, я не могу его найти, поэтому я извиняюсь за очевидный вопрос, если он один. Любая помощь приветствуется.

+1

Это анонимный класс: http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html –

+1

Посмотрите 'анонимные внутренние классы' в google. Вот что вы там видите. – rekaszeru

ответ

4

Редактируйте свои Java-книги :) Он называется anonymous inner class и был первоначально представлен для облегчения разработки графического интерфейса Java (с 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(); 

Так что преимущество заключается в том, что вам не нужно реализовать класс и создать его экземпляр позже.

Смежные вопросы