2015-10-19 2 views
0

У меня есть интерфейс List, а также класс SLList, который реализует List. У меня есть еще один класс, ListIterator, который использует SLList для создания экземпляра объекта, как это:Я не могу вызвать метод из класса, который расширяет мой интерфейс List

List<E> list = new SLList<>(); 

Эта часть хорошо. Однако, когда я пытаюсь вызвать метод, который находится только в классе SLList, я получаю ошибку компилятора, говоря, что он не может найти метод.

+3

Что это связано с дженериками? Это скорее проблема с вызовом метода в дочернем классе, который не существует в родительском классе. –

+0

Idk, я думал, что это может быть вопрос с генералами, но вы правы. – user5362867

ответ

2

Если вы хотите вызвать метод из SLList, объявление переменной должно быть типа SLList:

SLList<E> list = new SLList<>(); //this is what I mean 

Для компилятора только заявленные вопросы типа (часть слева)

+0

Точно. Этот метод существует только в классе SSList. Поскольку вы устанавливаете его на интерфейс List, этот метод будет недоступен. – Dale

+0

Хорошо. Благодаря! – user5362867

+0

вы должны принять один из ответов, который подходит вам @ user5362867 –

2

Итак, вы пытаетесь сделать что-то подобное?

List<E> list = new SLList<>(); 
list.someMethodOnlyInSLList(); 

Ну, во второй строке компилятор знает только, что список является List<E>, так что вы не можете вызвать любой метод, присутствующий в реализации, что не является частью интерфейса.

Я вы хотите сделать, что вы либо

  • создать новый интерфейс, возможно расширение из списка, который содержит этот метод и использовать этот интерфейс вместо List

  • Использование SLList<E> list = new SLList<>(); вместо

+0

Я вижу. Спасибо чувак. – user5362867

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