2013-04-29 2 views
0

У меня есть класс Writer, который имеет метод process(). Подкласс, TextWriter, распространяется Writer.Переопределение определенных строк из родительского класса

Я хочу использовать метод родительского класса process(), за исключением последней строки метода, которую я хочу настроить в соответствии с потребностями подкласса.

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

Я знаю, что это плохая конструкция, и в таких случаях необходимо использовать интерфейсы. Но я работал над внесением некоторых изменений в какой-то старый код, и мне было интересно, можно ли это сделать.

ответ

2

Вы должны поставить совместный код в защищаемой метод и метод процесс называют, как:

public class Writer { 


    protected void process_subProcess(){ 
     //most of process code 
    } 

    public void process(){ 
     process_subProcess(); 
     //specific last line 

    } 
} 

Тогда TextWriter только переопределяет битную его нуждается в. подпроцесс не великое имя, рассмотреть получше в зависимости от того, что на самом деле делает подпроцесс

public class TextWriter extends Writer{ 

    @Override 
    public void process(){ 
     process_subProcess(); 
     //different final line 
    } 

} 

Совместный код защищен так, что дочерние классы могут получить доступ к нему, но вы не можете случайно использовать метод подпроцесса снаружи пакет

3

Нет, это невозможно в Java.

Если у вас есть контроль над родительским классом, вы можете реорганизовать его, чтобы гарантировать, что соответствующие части могут быть переопределены. Если нет, у вас действительно нет другого варианта.

0

Нет, вы не можете этого сделать.
Лучший способ: override этот метод в вашем классе ребенка и выполнять вашу конкретную работу.

1

Нет, но вы можете извлечь часть, которая отличается между двумя классами до другого метода, который вы реализуете по-разному в каждом классе.

1

Нет, вы не можете переопределить определенный фрагмент кода. наиважнейшая связана с методом, не в какой-то строки кода

Смежные вопросы