2013-07-03 2 views
0

У меня есть защищенный метод в суперклассе.Переопределение защищенного метода

package com.pts.filter 
public class a { 
    ... 

    protected Filter callFilter(Object aInParam) { 
    return Filter.LowPass; 
    } 
} 

Я расширяю класс a.

package com.pts.filter.image  
public class b extends a { 
    ... 
    @Override 
    protected Filter callFilter(Object aInParam) { 
    ... 
    return Filter.LowPass; 
    } 
} 

Я получаю ошибку компиляции, говоря «Метод CallFilter типа б необходимо переопределить или реализовать метод Supertype». Я расширяю класс a, поэтому я не понимаю, почему он не видит метод супертипа. Это потому, что метод, который я пытаюсь переопределить, защищен? Из моего понимания защищенный метод виден в подклассах.

+10

Вы уверены, что вы все раскрываете? Это должно скомпилировать ... Если вы не переопределите _another_ класс с именем 'a', который не имеет этого метода – fge

+2

Похоже, вы забыли некоторые операторы' import'. Оба класса находятся в разных пакетах. –

+0

Как и в других комментариях/ответах, вы переопределяете другой класс 'a', чем вы думаете. Проверьте все свои классы 'a' и/или попробуйте переопределить некоторые другие методы и посмотреть, что произойдет. – RalphChapin

ответ

5

Мое единственное догадывание, почему это может не работать, это неправильный импорт. В обоих классах вы можете использовать разные импорт класса «Фильтр». В противном случае вполне законно переопределять защищенные методы так, как вы упомянули в своем коде.

+0

Использовал класс фильтра другого типа (не знал, что у java есть встроенный класс фильтра для swing-файла UI). То, что происходит, когда вы слишком доверяете инструменту предложений. – as3rdaccount

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