Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Параметризованный интерфейс
Форум программистов > Системное программирование > Java
Louis
Код
public interface IMath<T> {
    public T sum (T i, T j);

}



Код
public abstract class First implements IMath {
int a;
int b;
}


Код
public class Second extends First {

public Second(){
super.a = 1;
super.b = 2;
}
    @Override
public String toString(){
String s="a = "+a+"; b =  "+b;
return s;
}

    public Second sum(Second i, Second j) {
        throw new UnsupportedOperationException("Not supported yet.");
    }  
}


Ругается что не переопределил все абстрактые методы...
принимает только
Код
public Object sum(Object i, Object j) {
        throw new UnsupportedOperationException("Not supported yet.");
    }


Что нужно сделать что бы заработала строка
Код
public Second sum(Second i, Second j)
Yason
Эээ... если так нужно, чтобы в наследнике было именно rsum, очевидно, нужно определить (пустой?) sum. Ну, или в интерфейсе задавать rsum, а не sum.
Или я чего-то не понимаю?..
Louis
rsum - это описка))

везде sum
Yason
Судя по тому, что написано вот здесь, всех наследников тоже придётся параметризовать.
Код
public abstract class First<T> implements IMath<T> {
...
}

public class Second<T> extends First<T> {
...
    public T sum(T i, T j) {
        throw new UnsupportedOperationException("Not supported yet.");
    }  
}

Ну а в Second.sum() уже проверять равенство типа T типу Second.
Creo
Если честно не знаю, что ты хотел в итоге получть, и как ты собираешься складывадь два объекта секонд.... Но что бы получилось примерно то, что ты написал сверху, то вот
Код
public interface IMath<T extends Second> {
    T sum(T a, T b);
}

public abstract class First implements IMath<Second> {
    int a;
    int b;
}

public class Second extends First {
    public Second() {
        super.a=1;
        super.b=2;
    }
    public Second sum(Second a, Second b) {
        return new Second();
    }
}


При имплементации интерфейса должен быть подставлен реальный класс, т.к. у себя ты ничего не написал то компилятор по умолчанию расценил это как First implements IMath<Object>, по этому и ругался на всё остальное...

А вообще тема интересная, если хочешь, что бы и в наследиках твоего интерфейса били параметры(как в премерах Yason-а), то нужно, что бы сам класс, который имплементирует интерфейс был параметризирован.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2008 IPS, Inc.