下面的代码中有一些令人惊讶的地方。ListCell
类不是抽象的,但我们能够从中创建一个匿名类并覆盖其方法!这怎么可能?
ListCell<TodoItem> listCell = new ListCell<>() {
@Override
public void updateIndex(int i) {
super.updateIndex(i);
}
};
匿名类的概念(参见JLS,§15.9.5(与抽象类无关/仅限于抽象类。
new ListCell<>() {}
创建ListCell
的子类(具有合成名称(的实例。除非父类是最终类,否则子类是可能的。子类可以覆盖父类中的方法,除非它们是最终的。