2016-12-03 15 views
0

У меня есть два класса:Заливка Родительская переменная при вызове абстрактного метода в детстве

public abstract class Parent{ 
    Object parentObj; 
    public abstract Object something(); 

} 

И

public class Child extends Parent{ 

    @Override 
    public Object something(){ 
    return new Object(); 
    } 

} 

Есть ли способ сделать что-то в родительском установить parentObj каждый раз, когда something() метод называется?

Я не хочу устанавливать parentObj в каждом ребенке.

ответ

3

Sure:

public abstract class Parent{ 
    Object parentObj; 

    public final Object something() { 
     parentObj = ...; 
     return doSomething(); 
    } 

    protected abstract Object doSomething(); 

} 

и

public class Child extends Parent{ 

    @override 
    protected Object doSomething(){ 
     return new Object(); 
    } 
} 

Это называется картина метод шаблона.

+0

Может быть сложно сделать это, если это часть открытого API, где переопределение уже вызывается непосредственно потребителями (не знаю, является ли это проблемой на основе контекста) - вы должны быть способны переименовать все переопределения, которые могут быть невозможны, если потребители предоставляют свои собственные расширения. –

+0

Да, это то, что я получаю. Опять же, может и не быть проблемой; зависит от более широкого контекста вопроса. –