zoukankan      html  css  js  c++  java
  • 继承中的多态问题

    相关概念

    1.一个对象变量可以指示多种实际类型的现象被称为多态。在继承中的多态体现在:如果一个Employee类有三个子类,Manager,Secretary和Programmer,那么一个Employee类型的对象引用可以指示Manager或Secretary或Programmer,根据实际情况而定。
    2.有一个用来判断是否应该设计为继承关系的简单规则,就是“is-a”规则,它表明子类的每个对象也是超类的对象,例如:每个经理都是雇员。“is-a”规则的另一种表述法是置换法则,它表明程序中出现超类对象的任何地方都可以用子类对象置换。

    注意问题

    eg1:

    Manager boss = new Manager(...);
    Employee[] staff = new Employee[3];
    staff[0] = boss;
    

    在这个例子中,变量staff[0]与boss引用同一个对象,但编译器将staff[0]看成Employee对象,所以boss.setBonus(500)是可以的,但是staff[0].setBonus(500)是错误的。因为setBonus不是Employee类的方法。然而,不能将超类的引用赋给子类变量,如Manager m = staff[i]。

    eg2:子类数组的引用可以转换成超类数组的引用,而不需要采用强制类型转换。

    Manager[] managers = new Manager[10];
    Employ[] staff = managers;
    

    这样完全没问题,managers和staff引用的是同一个数组

    staff[0] = new Employee(...)
    

    这样编译器也不会报错,但是其实我们把一个员工归入了经理行列中,在运行managers[0].setBonus(100)的时候,将会调用一个不存在的实例域,进而抛出ArrayStoreException异常。

  • 相关阅读:
    利用crontab每天定时备份MySQL数据库
    MySQL基本SQL语句之数据插入、删除数据和更新数据
    Vim命令合集
    ubuntu下手动安装php-amqp模块教程
    变量作用域(总结篇)
    变量作用域(示例篇)
    定义一个函数
    正则表达式
    re模块中常用功能函数
    python内置函数
  • 原文地址:https://www.cnblogs.com/huangzefeng/p/10492928.html
Copyright © 2011-2022 走看看