首页 > 试题广场 >

下列代码输出结果为( ) class Animal{ pub

[单选题]
下列代码输出结果为(      )
class Animal{
    public void move(){
        System.out.println("动物可以移动");
    }
}

class Dog extends Animal{
    public void move(){
        System.out.println("狗可以跑和走");
    }
    public void bark(){
        System.out.println("狗可以吠叫");
    }
}

public class TestDog{
    public static void main(String args[]){
        Animal a = new Animal();
        Animal b = new Dog(); 

        a.move();
        b.move();
        b.bark();
    }
}
  • 动物可以移动
    狗可以跑和走
    狗可以吠叫
  • 动物可以移动
    动物可以移动
    狗可以吠叫
  • 运行错误
  • 编译错误
编译看左,运行看右。
发表于 2021-08-24 12:39:57 回复(0)
Dog的对象被声明成父类Animal了,Animal没有bark的方法,通不过编译
发表于 2021-09-03 14:10:58 回复(0)
Animal b = new Dog(); 
此句使用父类类型,父类没有bark()方法。会出现编译错误。
发表于 2021-08-28 16:31:53 回复(0)
多态中静态变量、静态方法、成员变量,编译看左,运行也看左,无论右边是当前类还是当前类的子类,编译运行期间执行的都是当前类的方法。
对于非静态方法,编译看左,运行看右。如果编译期间没有在左边类找到该方法,则编译报错!
发表于 2022-09-12 22:28:15 回复(0)
编译看左,运行看右我还是没有理解。我还是理解成赋值吧,好比声明了一个Dog对象并将其赋值给了另一个对象,这个对象是Animal类型的对象,由于子类可以继承并实现父类,那么这种赋值本身没有问题,但是现在就在于目前被赋值的对象是一个Animal对象,并不包含子类的方法和属性,因此会出现编译错误。
发表于 2022-03-27 09:35:29 回复(1)
java: 找不到符号
  符号:   方法 bark()
  位置: 类型为Animal的变量 b
发表于 2023-04-12 16:01:36 回复(0)
注意区分编译错误和运行错误
发表于 2023-04-04 23:00:45 回复(0)