• scjp考试准备


    题目为如下代码的执行结果:

    abstract class Vehicle{
        public int speed(){
            return 0;
        }
    }
    
    class Car extends Vehicle{
        public int speed(){
            return 60;
        }
    }
    
    class RacerCar extends Car{
        public int speed(){
            return 150;
        }
        
        public void run(){
            System.out.println("I'm running...");
        }
    }
    
    public class Test{
        public static void main(String[] args){
            RacerCar racer = new RacerCar();
            Car car = new RacerCar(); 
            Vehicle vehicle = new RacerCar(); 
            System.out.println(racer.speed() + ", " + car.speed()  + ", " + vehicle.speed()); 
        }
    }

    分析下题目。题中考查的点是java的多态性。如题中的“Car car = new RacerCar(); ”一句,其中变量car在编译时类型是Car,在运行时类型是RacerCar。如这种情形,在运行时调用引用变量的方法时,其方法行为总是表现出子类方法的特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量,调用相同的方法,呈现出不同的行为特征。这就是多态性。

    有两点需要注意:

    1. 与成员方法不同的是,类的成员变量并不具备多态性;

    2. 引用变量在编译时只能调用它编译时类型所具有的方法,而在执行时执行的是它的运行时类型的方法。如上面的代码中,如果让car变量执行run()方法,那么将会无法编译,因为编译时类型Car没有run()方法。尽管car变量所指向的对象确实有run()方法(反射时可见,或将car强制类型转换为RacerCar类后可见)。

    看一下执行结果:

    image

  • 相关阅读:
    footer在最低显示
    jQuery toast message 地址 使用
    linux 获取经过N层Nginx转发的访问来源真实IP
    Java Json格式的字符串转变对象
    多个机器获取微信access-token导致的有效性问题
    站点技术---301重定向
    C++技术问题总结-第8篇 STL内存池是怎么实现的
    IIS中遇到无法预览的问题(HTTP 错误 401.3
    梯度下降深入浅出
    COM-IE-(2)
  • 原文地址:https://www.cnblogs.com/amunote/p/3945810.html
Copyright © 2020-2023  润新知