WindowAdapter
класс Java определяется как абстрактного класса и имеет много абстрактных методов, в том числе:Почему не реализованы некоторые методы в WindowAdapter?
windowClosing()
windowClosed()
windowActivated()
Все эти методы являются пустыми и Java говорит, что класс существует как удобство для тех, кто не хочет создавать классы, реализующие WindowListener
. Поскольку в отличие от интерфейса WindowListener
, WindowAdapter
дает нам возможность реализовать только один из абстрактных методов, определенных в нем.
Например, если добавить следующий код в класс, который наследует от Window
, я сделать окно закрывающиеся с помощью кнопки «х» в правом верхнем углу:
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
dispose();
}
});
Однако это меня смущает. Прежде всего, что именно здесь происходит? Я создаю внутренний класс, который расширяет WindowAdapter
? Ключевое слово new
обычно используется для создания экземпляра, но, очевидно, мне не разрешено создавать экземпляр абстрактного класса. Итак, почему здесь ключевое слово new
?
Во-вторых, почему мне избежать реализации только одного из абстрактных методов в WindowAdapter
? Обычно в Java, если я определить абстрактный класс:
public abstract class UpperClassAb {
public abstract void test();
public abstract int boa();
}
, а затем попытаться использовать этот класс, так же, как я использовал WindowAdapter
выше:
UpperClassAb tester = new UpperClassAb() {
public void test() {
System.out.println("mor");
}
};
Я получаю сообщение об ошибке, потому что я не реализуя все абстрактные методы, а только один из них. Как я могу избежать реализации только одного из абстрактных методов в случае WindowAdapter
? Является ли это единичным случаем, и если я не могу подражать этому поведению?
Спасибо, что объясняет второй вопрос, как насчет первого, почему мы используем новое ключевое слово при определении внутреннего класса? – Gravity
я отредактировал мой ответ, чтобы включить объяснение для нового ключевого слова – loonytune
в порядке, через 7 минут ваш ответ будет принят :) – Gravity