Насколько я понимаю, класс, реализующий интерфейс, может использовать дочерние классы класса, определенного в интерфейсе, а не только использовать этот конкретный класс.Реализация интерфейса с использованием исключения дочернего класса
Вот пример того, что я имею в виду: Предположим, что следующий код
public abstract class TestRootAbstractClass implements TestInterface {}
и
public abstract class TestChildAbstractClass extends TestRootAbstractClass {}
TestInterface
определено в TestRootAbstractClass
выглядит следующим образом
public interface TestInterface<T extends TestRootClass> {
void test(T extendedTestClass) throws Exception;
}
и TestRootClass
ссылочного в TestInterface
выглядит так
public abstract class TestRootClass {}
Этот класс также имеет дочерний класс, который выглядит следующим
public class TestChildClass extends TestRootClass {}
Я думаю, что следующий код Java будет недействительна из дженериков, используемых в TestInterface
public class TestImplementation extends TestChildAbstractClass {
public void test(TestChildClass top) {
System.out.println("tested");
}
}
но Ява жалуется, что
абстрактный метод
test(T)
, определенный вTestInterface
, не реализован.
Разве это не работает ООП, который должен работать?
если 'T' дефолт в' Object', то это было бы даже лучше для кода, который я отправил ... я бы определенно не вопрос. И в 'TestInterface', я фактически указываю, что действительный' T' - это 'T extends TestRootClass', который должен сузить область действия дальше от' Object' – reayn3
. Я не вижу, как абстрактное решение TestImplementation решит проблему. Во всяком случае, это «задержит» проблему до первой конкретной реализации. – reayn3
Я исправил свое первоначальное заявление и попытался быть более точным в своем ответе. – luk2302