создание экземпляра абстрактного класса
вроде везде где читаю написано, что нельзя создать экземпляр абстрактного класса
public abstract class AbstractClass {
public abstract void move();
}
class Test {
public static void main(String[] args) {
AbstractClass abstractClass = new AbstractClass() {
@Override
public void move() {
}
};
System.out.println(abstractClass);
}
}
но данный код компилируется, или я что-то не так понимаю? (имплементировать метод IDE предложила)
Ответы (2 шт):
Автор решения: Anton Shchyrov
→ Ссылка
Не понимаете. Вы создаете объект анонимного класса наследника AbstractClass и у этого наследника перекрываете абстрактный метод move. Так же можно поступать и с интерфейсами
Автор решения: NaClnik
→ Ссылка
Этим куском кода
AbstractClass abstractClass = new AbstractClass() {
@Override
public void move() {
}
};
Вы создаёте объект класса, который является не самим экземпляром абстрактного класса, а его наследником. Просто в данном случае класс наследника является анонимным. То есть это то же самое, что создать новый класс, который наследуется от AbstractClass и создать его экземпляр:
public class HelloWorld{
public static void main(String []args){
System.out.println("Hello World");
}
}
public abstract class AbstractClass {
public abstract void move();
}
public class DerivedClass extends AbstractClass{
@Override
public void move(){
}
}
class Test {
public static void main(String[] args) {
AbstractClass abstractClass = new DerivedClass();
System.out.println(abstractClass);
}
}