2013-06-02 3 views
1

Класс subA является подклассом класса A. Я попытался переопределить метод, но почему-то это не позволяет мне переопределить его. почему это? Это из-за аргумента в параметре?Метод переопределения

Сообщение об ошибке следующего содержания:

название столкновение: добавить (E # 1) в Субе и добавить (E # 2) в А имеют один и тот же стиранию, но ни один не перекрывает другой где Е # 1, Е # 2 представляют собой тип-переменные:
Х # 1 проходит Объект объявлен в классе Suba
E # 2 простирается объектами объявлены в классе А

суперкласс A:

public class A <E> {  

public void add(E toInsert) {...} 

} 

SubClass Суб:

public class subA <E> extends A {  

//overrides the method from A class 
public void add (E toInsert) <-- doesn't let me overrides  
{...} 

} 
+7

вам необходимо предоставить с параметром типа, когда вы унаследовали его как 'общественный класс Субе расширяет ' –

+3

@TI: что выглядит как ответ, а не комментарий. –

+5

Комментарий TI - это все, что вам нужно знать. Однако в будущем вместо «это не позволяет мне», вы должны опубликовать точное сообщение об ошибке, которое компилятор сообщает. –

ответ

7

Вы подклассы сырогоA класса (не были представлены общие параметры), которые по определению из спецификации языка Java удаляют все общие данные из суперкласса. Это означает, что ваш общий метод подкласса несовместим с (теперь) неродным методом суперкласса.

Предоставить общий параметр для A путем пропускания через общий параметр для подкласса:

public class subA <E extends Comparable<E>> extends A<E> {  

    @Override 
    public void add (E toInsert) { 
     // ... 
    } 
} 
+0

спасибо ... он работает сейчас :) –

-4
public class subA <E extends A> extends A { 

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

+4

Пожалуйста, ** ПОЖАЛУЙСТА ** попробуйте свой код в своей IDE перед отправкой ответа. –

0

переопределение функции в C++ Программирование

Если базовый класс и производный класс имеют функции-члены с одинаковыми именами и аргументами , Если вы создаете объект производного класса и записываете код для доступа к этой функции-члена, тогда функция-член в производном классе вызывается только, то есть функция-член производного класса переопределяет функцию-член базового класса. Эта функция в программировании на С ++ называется переопределением функции.

Примера для демонстрации переопределения функции в C++ программирования Доступа к переопределены функциям в базовом классе Из производного класса

Чтобы получить доступ к переопределенным функциям базового класса из производного класса, область видимости оператора разрешения ::. Например: если вы хотите получить доступ к функции get_data() базового класса из производного класса в приведенном выше примере, то следующий оператор используется в производном классе.

A :: get_data; // Вызов get_data() класса A.

Это потому, что если имя класса не указано, компилятор считает, что функция get_data() вызывает себя.

Пользователь оператора разрешения области видимости в перегруженной функции - Смотри на: http://www.programiz.com/cpp-programming/function-overriding#sthash.7UmWybpS.dpuf

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