转换为抽象类

时间:2014-09-17 20:50:23

标签: class methods call abstract

好吧,所以我有一个抽象类:

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()是抽象的,所以它不能被调用..但是它不会给我一个例外吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

在内存中创建的对象仍然是Chicken类的实例。你通过强制转换来做的就是将它视为Animal类的一个实例,这意味着你只能使用该类可用的方法和属性。

因此,如果您的Chicken类有一个LayEgg()方法,那么将其转换为Animal意味着您无法调用该方法(除非您退回,因为它仍然是机器内存中的Chicken。您仍然可以调用Animal可用的方法,行为将是实例化的实际对象的行为。

与前进完全相同:

Animal myAnimal = new Chicken();