Java - проблема с абстракцией - PullRequest
0 голосов
/ 10 ноября 2010

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

  • Если я сделаю this.createITextArea(), он создаст объект.
  • Если я сделаю ITextArea area = new ITextArea(), я не смогу, потому что класс абстрактный.

На самом деле, мне нужно отправить это через функцию.Но с первым методом я не могу, или я не знаю, как получить переменную для этого класса.Как мне это передать?

Мне нужно что-то вроде area=this.createITextArea(), чтобы я мог использовать переменную область в функции ...

Надеюсь, вопрос ясен ...

Ответы [ 4 ]

4 голосов
/ 10 ноября 2010

Так в чем же проблема:

ITextArea area = this.createITextArea();

3 голосов
/ 10 ноября 2010

Несмотря на то, что вопрос немного неясен:

Например:

ITextArea area = this.createITextArea();
someObj.someMeth(area);

или inline:

someObj.someMeth(this.createITextArea());

Я бы порекомендовал продолжить чтение по интерфейсам Java.

2 голосов
/ 10 ноября 2010

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

Несколько простых примеров, иллюстрирующих это:

public static main(String[] args) {
  List list = createList();
}

public static List createList() {
  return new ArrayList();
}

Метод createList возвращает тип интерфейса (List) , но возвращает экземпляр реального класса (ArrayList). Таким образом, в конце локальная переменная list содержит ссылку на этот экземпляр ArrayList.

Вернемся к вашему примеру: если у вас есть интерфейс

public interface ITextArea { /* methods */ }

и хотите создать объект «который реализует этот интерфейс», тогда вам нужен другой класс, такой как

public class TextArea implements ITextArea { /* methods */ }

и вы захотите создать экземпляры этого конкретного класса.

2 голосов
/ 10 ноября 2010

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

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