Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Множественное наследование и анонимный класс 
:(
    Опции темы
Sid
  Дата 23.4.2004, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 23.4.2004

Репутация: нет
Всего: нет



Код

import java.lang.Exception;

interface iter_interface{
boolean hasNext();
Object next() throws NoSuchElementException;
void remove() throws NoSuchElementException;
}

abstract class IterForward_abstract implements iter_interface{
Object[]obj;
IterForward_abstract(Object[]a){
 obj = a;
}
private int pos = 0;
public boolean hasNext(){
 //Одна реализация
}
public Object next() throws NoSuchElementException{
 //Одна реализация
}
public abstract void remove() throws NoSuchElementException;
}

abstract class IterMoveBack_abstract implements iter_interface{
Object[]obj;
IterMoveBack_abstract(Object[]a){
 obj = a;
}
private int pos = obj.length - 1;
public boolean hasNext(){
 //Другая реализация
}
public Object next() throws NoSuchElementException{
 //Другая реализация
}
public abstract void remove() throws NoSuchElementException;
}

class Iter{
Object[]obj;
Iter(Object[]a){
 obj = a;
}
public iter_interface moveForward(){
 class IterForward extends IterForward_abstract{
  IterForward(Object[]obj){
   super(obj);
  }  
  public void remove() throws NoSuchElementException{
   //Одна реализация
  }
 }
 return new IterForward(obj);
}
public iter_interface moveBack(){
 class IterMoveBack extends IterMoveBack_abstract{
  IterMoveBack(Object[]obj){
   super(obj);
  }  
  public void remove() throws NoSuchElementException{
   //Другая реализация
  }
 }
 return new IterMoveBack(obj);

}
}

Есть интерфейс итератор и два абстрактных класса, частично
его реализующих. В классе Iter реализованы два внутренних класса, которые
расширяют абстрактные.
Возможно ли использовать вместо внутренних классов анонимные внутренние классы?
Также в данном примере пришлось написать во внутреннем классе конструктор, который,
в принципе, не нужен, хотелось бы использовать конструктор по умолчанию, но не получается,
т.к. тогда super не может определить obj пока конструктор Iter не был вызван.
Можно ли этого избежать?
PM MAIL   Вверх
Alt
Дата 26.4.2004, 11:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
т.к. тогда super не может определить obj пока конструктор Iter не был вызван.


А почему бы конструктор и не вызвать? smile.gif
Или я что-то не понимаю?

Код ниже вроде работает...

Код

abstract class Wrapping {
 int i;
 public Wrapping(int x) { i = x; }
 public abstract int value();
}

public class Test {
 int x;
 Test(int x){
  this.x=x;
 }
 
 public Wrapping wrap() {
   // Base constructor call:
   return new Wrapping(x) { // Pass constructor argument.
     public int value() {
       return i * 47;
     }
   };
 }
 public static void main(String[] args) {
   Test t = new Test(10); // Constructor call :)
   Wrapping w = t.wrap();
System.out.println(w.value());
 }
}

  Вверх
Sid
Дата 28.4.2004, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 23.4.2004

Репутация: нет
Всего: нет



В приведенном примере нет множественного наследования, внутренний класс просто расширяет абстрактный. thumbs-up.gif
В общем я думая реализовать внутренним анонимным классом просто не получится, а потому проще обойтись локальным внутренним класом.
PM MAIL   Вверх
sergejzr
Дата 28.4.2004, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 6
Всего: 360



Цитата
В классе Iter реализованы два внутренних класса, которые расширяют абстрактные.
Возможно ли использовать вместо внутренних классов анонимные внутренние классы?


Насколько я понимаю этот вопрос, Alt всё правильно сказал. Возможно в этом примере будет это лучше видно.
Код

class Iter
{
 Object[]obj;
 Iter(Object[]a)
 {
   obj = a;
 }
 public iter_interface moveForward()
 {
   return new IterForward_abstract(obj)
                      {
                        public void remove() throws NoSuchElementException
                         {
                          //Одна реализация
                         }
                      };
 }

 public iter_interface moveBack()
 {
   return new IterMoveBack_abstract(obj)
                      {  
                       public void remove() throws NoSuchElementException
                         {
                           //Другая реализация
                         }
                     };
  }
}



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sid
Дата 30.4.2004, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 23.4.2004

Репутация: нет
Всего: нет



В общем sergej.z, Alt спасибо, но я это уже пробовал не получается, выкидывает много эксепшн, возможно потому, что анонимный класс типа абстрактного, а фабричный метод возвращает тип интерфейса...

PM MAIL   Вверх
sergejzr
Дата 3.5.2004, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 6
Всего: 360



Так у тебя "IterMoveBack_abstract"- абстрактный класс. Тебе туда "remove" вообще не надо писать. Если хочешь, дай линьк на файл целиком, посмотрим. Потому что должно всё работать...


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0862 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.