forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Программирование (http://forum.boolean.name/forumdisplay.php?f=54)
-   -   Наследование в Java. Использование методов из наследника через интерфейс. (http://forum.boolean.name/showthread.php?t=15972)

Ksanatos 04.12.2011 19:54

Наследование в Java. Использование методов из наследника через интерфейс.
 
Есть интерфейс и экземпляр этого интерфейса в переменной, ей, естественно, присвоен, описанный с помощью интерфейса, класс. Можно ли как-то обратится с помощью этой переменной к методам из класса не описанным в интерфейсе?
Вот пример кода:
PHP код:

interface Sample {
  public 
void someMethod();
}

class 
implements Sample {
  public 
String methodInClass() {
    return 
"yaeh!";
  }
}

class 
{
  
Sample variable = new A();
  
String.out.println("Is it true? " variable.methodInClass());//можно-ли делать так, и если нет, то чем это можно заменить?



Dream 04.12.2011 21:20

Ответ: Наследование в Java. Использование методов из наследника через интерфейс.
 
не знаю как там в яве с рефлекцией, но это нарушения принципов OOП.
Варианта только 2 - привести variable к А или добавить обьявление метода в интерфейс.
Хотя ещё можно сделать ещё один интерфейс с медотом "methodInClass", и его тоже добавит в наследование

Но ачем вообще такое может понадобиться?

Ksanatos 04.12.2011 21:35

Ответ: Наследование в Java. Использование методов из наследника через интерфейс.
 
нужен массив объектов разных классов, соответственно методы во всех классах разные.
думаю сделать так: для каждого класса сделать по переменной, и присваивать ей переменные массива, в зависимости от типа.

Dream 05.12.2011 02:14

Ответ: Наследование в Java. Использование методов из наследника через интерфейс.
 
если куча разных обьектов почемуто содержаться в одном списке то они таки должны хоть както быть логичски связаны. иначе, товарищь, перестаньте использовать ООП не по назначению.

ну или есть ещё другой вариант(который я считаю рассово неверным)

Код:

Interface ISample {
  public int getType();
}

class A1 implements ISample {
public int getType()
{
return 1;
}

  public String methodInClass() {
    return "yaeh!";
  }
}

class A2 implements ISample {

public int getType()
{
return 2;
}

  public String methodThird() {
    return "Test!";
  }
}


void Test(ISample test) {


  if(test.getType()==1)
{
A1 a1=(A1)test;
 String.out.println("Is it true? " + a1.methodInClass());//можно-ли делать так, и если нет, то чем это можно заменить?
}
 else  if(test.getType()==2)
{
A2 a2=(A2)test;
 String.out.println("Is it true? " + a2.methodThird());//можно-ли делать так, и если нет, то чем это можно заменить?
}
}



Часовой пояс GMT +4, время: 02:15.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot