Рассмотрим следующую ситуацию пример:Статический конструктор в абстрактном классе?
public abstract class Parent
{
private ByteBuffer buffer;
/* Some default method implementations, interacting with buffer */
public static Parent allocate(int len)
{
// I want to provide a default implementation of this -- something like:
Parent p = new Parent();
p.buffer = ByteBuffer.allocate(len);
return p;
}
}
public class Child extends Parent
{
/* ... */
}
public class App
{
public static void main(String[] args)
{
// I want to ultimately do something like:
Child c = Child.allocate(10);
// Which would create a new child with its buffer initialized.
}
}
Очевидно, что я не могу это сделать (new Parent()
), так как Родитель является абстрактным, но я не действительно хотят Parent. Я хочу, чтобы этот метод автоматически предоставлялся подклассам.
Я предпочел бы использовать подход «статический конструктор» с .allocate()
вместо добавления другого видимого конструктора.
У меня есть какой-либо способ поместить эту реализацию по умолчанию в класс Parent
, или каждый из подклассов содержит один и тот же код?
Предполагаю, что другим вариантом будет выделение «абстрактного» из родителя, но абстрактные приставки - мне никогда не нужен объект типа «Родитель».
Заранее спасибо.
Статические методы не наследуются подклассами, поэтому этот подход является фундаментальным недостатком. Возможно, вместо этого вы хотите построить строителя? – Perception
Как вы собираетесь его использовать? Можете ли вы показать пример? Чтобы вызвать 'Child.allocate', вам нужно реализовать статический метод в' Child'. –
Также посмотрите [заводская схема] (http://en.wikipedia.org/wiki/Factory_pattern) –