/ / Downcasting обекти в Java - java, downcasting

Отдалечените обекти в Java - Java, downcasting

class A{

}

public class Demo
{
public static void   main(String s[])
{
Object o=(Object) new Demo();
if (((A)(o)) instanceof Object)
{
System.out.println("true");
}
}
}

Получавам изключение, докато работя с класа Demo.java:

java.lang.ClassCastException: Demo cannot be cast to A

Как да се понижи o позоваване на class A?

Отговори:

1 за отговор № 1

Да започнем от самото начало: Това е ужасен код. Това се казва:

  • Вие хвърляте Demo към Object (по каквато и да е причина, тъй като в Java всичко е Object, няма нужда да се предава).
  • След това качвате o, че знаете, че е тип Demo, към А (защо това ще работи?).
  • Проверявате дали обектът o е от тип Object (защо това не е успешно?)

Някои бележки:

  • o не трябва да се разглежда като референция, а е обект на Object, както сте го декларирали. Забравете как работят нещата в C.
  • Помислете за интерфейси и ако искате A да бъде интерфейс, който Demo изпълнява.
  • Можете да прехвърляте копия само на клас, който те вече разширяват.

Пример за понижение:

    public class A {
int variable = 0;
}

public class Demo extends A{

}

public void testDowncast(){
Demo myClass = new Demo();
myClass.variable = 2;
A morphingTime = myClass;
System.out.println("And now Power Ranger Demo has turned into Mighty A:");
System.out.println("I am: "+morphingTime.getClass() + " and my variable is: " + morphingTime.variable);
}

4 за отговор № 2

Можете да направите това само ако Demo простира Aв противен случай просто не можете да прехвърлите обект на клас към друг тип.

public class Demo extends A {

1 за отговор № 3

Отговорът от RJ вярно е

можете да направите това само ако Demo простира A

За ваша информация не е необходимо да въвеждате какъвто и да е обект, докато се присвоява Object

Object o= new Demo();

и всеки обект винаги ще бъде instanceof Обект, т.е. състоянието ви instanceof Object за класовите обекти винаги ще бъде true

И защо се опитваш да правиш нещата по този начин, ((A)(o)) без проверка на типа с instanceof по-скоро трябва да бъде,

if (o instanceof A)

1 за отговор № 4

Първо, вие получавате "ClassCastException"защото действителният ви обект "o" е от тип "Demo", а класовете "Demo" и "A" не са в едно и също наследствено дърво. Не сте получили грешка при компилирането само защото сте хвърлили обекта си в клас "Object" (тъй като "A" и "Object" са в едно и също дърво на наследство). те ("Демо" и "А") да бъдат част от едно и също наследствено дърво. Например можете да удължите Демо от А. След това проверете обекта "o" без да направите така

    if (o instanceof A) {
// now cast to "A"
// and invoke any accessible method (or etc.) that class A provides
((A)o).doSomthingMathod();
}

0 за отговор № 5

Трябва просто да пренапишете кода си като

Object o=new Demo();
if (o instanceof A)
{
System.out.println("true");
}

и след това вижте какви промени ако Demo extends A


0 за отговор № 6

Първото нещо, в което не е необходимо да хвърляте вашия Demo екземпляр, за да бъде обект, без да го карате, можете да присвоите Demo препратка към Object class, защото Object е супер клас от всички java класове.

public class Demo extends com.A {

}

0 за отговор № 7

Прехвърлянето е актът на препращане на базов клас към един от неговите произволни класове.

Например :

public class Parent{}
public class Child extends Parent{}

public static void main(String args[]){
Parent parent = new Child();              // Parent is parent class of Child, parent variable holding value of type Child
Child child = (Child)parent;              // This is possible since parent object is currently holding value of Child class
}

Можете да се обърнете това въпрос, за да получите отговор.