class Animal{
public void findAnimal(){
System.out.println("Animal class");
}
public void sayBye(){
System.out.println("Good bye");
}
}
class Dog extends Animal{
public void findAnimal(){
System.out.println("Dog class");
}
}
Учитывая вышеизложенное наследования, следует понимать, что ссылка на животных может относиться к объекту DogПочему downcasting разрешено в java?
Animal animal=new Dog();
В качестве объекта Собака может выполнять все животное может сделать, как и в описанном выше случае собака также скажем, и найти методы поиска.
Но почему это разрешено опускать объект Animal на объект Dog, который не имеет никакой цели и не работает во время выполнения.
Dog dog=(Dog)new Animal(); // fails at runtime but complies.
Dog dog=(Dog)animal;
Вышеуказанное утверждение выглядит логичным, поскольку ссылка на животных указывает на объект Собаки.
Вы утверждаете, что 'собака собаки = (Animal) новый Animal();' компилируется? – Kayaman
Это синтаксически и семантически корректно: точно так же, как x = 1/0 – cup
@ Кайаман: мой плохой должен быть Собака собака = (Собака) new Animal(); – Pankaj