java中继承这章中,超类的引用是不能赋给 子类的。 例如: Employee是超类,manager是子类; Employee boss= new Employee("Jack" , 50000, 2002, 9,18); manager staff[]=new manager[3]; staff[0]=boss; 这是不被允许的,首先manager都是 Employee,但不是所有的Employee都是 manager,上例子意思就是所有的Employee 都是manager了,所以违背了继承的规定。 而子类引用是可以赋给超类的 例如: Employee是超类,manager是子类; manager boss= new manager("Jack" , 50000, 2002, 9,18); Employee staff[]=new Employee[3]; staff[0]=boss; 但是子类引用的数组转换成超类引用的数组 是会出现一个问题, 例如: Employee是超类,manager是子类; manager mana[]=new manager[3]; Employee staff[]=mana; //合法 先分析:staff[]和mana[]其实是相同的引 用,staff数组指向的是manager的数组, 比如: staff[0]=new Employee("Jack", 50000 , 2002, 9,18); mana[0].setBounus(1000); //此处会出现jav a.lang.ArrayStoreException异常 (setBounus()只有manager类中才有的方法) 此时,new的话,只是在Employee对象中进 行属性初始化,我们要知道此时mana[0]就 是Employee的对象了,而不是manager的对 象,所以在调用子类manager中才有的 setBounus(),就会发生向后转型,和第一 个例子差不多“就是所有的Employee都是 manager了”。 书中提到:为了确保不发生这类破坏,所有数 组都要牢记创建时的元素类型,并负责监督仅 将类型兼容的引用存储到数组中。
java中子类与超类之间替换原则
于 2022-04-18 20:07:56 首次发布