Конечно, следующее не работает в Java (без абстрактных статических методов) ...
public abstract class Animal {
public abstract static Animal getInstance(byte[] b);
}
public class Dog extends Animal {
@Override
public static Dog getInstance(byte[] b) {
// Woof.
return new Dog(...);
}
}
public class Cat extends Animal {
@Override
public static Cat getInstance(byte[] b) {
// Meow.
return new Cat(...);
}
}
Как правильно требовать, чтобы классы Animal
имели статический метод getInstance
, который создает себя? Этот метод должен быть статическим; «нормальный» абстрактный метод здесь не имеет смысла.