好吧,所以我有一个抽象类:
public abstract class Animal {
public abstract String sound();
}
那么,我有一个扩展它的类:
public class Chicken extends Animal {
public String sound() {
return "Cockadoodledoo!";
}
}
然后说我有一个主要方法的测试类:
public class Test {
Chicken a = new Chicken();
System.out.println((Animal)a).sound());
}
输出是" Cockadoodledoo!"所以我的问题是,为什么,如果我给动物种一个,它仍然称为鸡的方法?它不会把它视为动物的对象吗?是因为sound()是抽象的,所以它不能被调用..但是它不会给我一个例外吗?
提前谢谢。
答案 0 :(得分:0)
在内存中创建的对象仍然是Chicken
类的实例。你通过强制转换来做的就是将它视为Animal
类的一个实例,这意味着你只能使用该类可用的方法和属性。
因此,如果您的Chicken
类有一个LayEgg()
方法,那么将其转换为Animal
意味着您无法调用该方法(除非您退回,因为它仍然是机器内存中的Chicken
。您仍然可以调用Animal
可用的方法,行为将是实例化的实际对象的行为。
与前进完全相同:
Animal myAnimal = new Chicken();