Анонимные классы
Можно объявить анонимный (безымянный) класс, который может расширить другой класс или реализовать интерфейс. Объявление такого класса выполняется одновременно с созданием его объекта посредством оператора new.
classBase {
void show(){}
}
//объявление класса и его тела
Base ob = new Base(){
voidshow(){
//новая реализация
}
};
Анонимные классы эффективно используются, как правило, для реализации (переопределения) нескольких методов и создания собственных методов объекта. Конструкторы ни определять, ни переопределять нельзя. Анонимные классы допускают вложенность друг в друга, что очень сильно запутывает код и делает эти конструкции непонятными, поэтому эти возможности обычно не используются.
/* пример # 6 : анонимные классы и логические блоки : AnonymousDemo.java */
abstract class A {
private char c = 'A';
A() {
}
A(char c) {
this.c = c;
}
public char getC() {
return c;
}
public abstract int getNum();
}
class AnonymousDemo {
static int j = 2;
static A ob1 = new A((char) 57) {
//A(char c) {ch = c + 1;}
// ошибка! Конструктор переопределять нельзя
{
System.out.println("первый анонимный класс");
}
public int getNum() {
return Character.digit(getC(), 10);
}
};
public static void main(String[] args) {
System.out.println(ob1.getNum());
A ob2 = new A() {
int i = 1;
{
System.out.println("второй анонимный класс");
}
public int getNum() {
i = show(); //вызов собственного метода
return i + Character.getNumericValue(getC());
}
int show() {
return i + j;
}
};
System.out.println(ob2.getNum());
}
}
В результате будет выведено:
Дата добавления: 2015-04-05; просмотров: 1086;