是否可以在超类对象上调用子类的方法?

2022-09-02 14:15:39

动物是狗的超类,狗有一种叫做吠叫的方法

public void bark()
{
    System.out.println("woof");
}

请考虑以下事项:

Animal a = new Dog();
if (a instanceof Dog){
    a.bark();
}

将会发生什么?

  1. 不允许分配
  2. 允许对树皮的调用,并在运行时打印“woof”
  3. 允许叫喊吠,但不打印任何内容
  4. 对树皮的调用导致编译时错误
  5. 对树皮的调用导致运行时错误

我说2,因为我们正在检查物体是否是狗;因为狗是其中有树皮方法的类,如果是,那么我们称之为它将打印出来:s

我的理解是否正确?


答案 1

这不会编译,因为Animal没有一个叫做树皮的方法。这样想,所有的狗都是动物,但并不是所有的动物都是狗。所有的狗都会吠叫,但不是所有的动物都会吠叫。


答案 2

否 - 答案是;

4)调用树皮导致编译时错误

树皮方法未定义为指定类型Animal上的方法,因此将导致编译时问题;这可以通过铸造来解决;

((Dog)a).bark();

推荐