1.java中,子类数组的引用可以转化为超类数组的引用,而不需要采取强制类型转化
Manger[] mangers =new manger[10];
//转化为Employee[]数组完全合法
Employ[] staff =mangers;
因为每一个经理也一定是一个员工,此时在进行赋值
staff[0]=new Employee{"jack",....}.
因为staff[0]与manger[0]引用同一对象,此时编译器接纳了,及把一个普通员工纳入经理行列,此时调用mangers[0]中,经理的专有的方法,就会参数ArrayStoreException
2.当一个值存入变量时,编译器将检查是否允许该操作
①子类的引用赋值该超类的变量,允许的
②超类的的引用赋值给子类的变量,需要进行强制类型转换,才能通过运行时候的检测:进行强制装换时,需要检查是否能强制转换
if (staff[1] instanceof Manger ){
//进行stall[1]强制转化为Manger的变量
}
3.Protected相关(https://blog.csdn.net/qq_17885583/article/details/80045006)
①要想用子对象访问父类的protected实例域或方法,必须在该子对象定义的类的方法体中,即A类中方法可以通过子对象this或new出了的a子对象来调用父类的protected实例域或方法,如果不在A自身类中,则不允许调用。如上,B类中,不允许new出来的子对象a来调用其父类的protected实例域或方法(等价于Manager类中不能访问其他Employee对象中的这个域)。
②要谨慎使用 protected 属性。假设需要将 Employee 类提供给其他程序员使用,而在这个类中设置了受保护的 hireDay 域。其他程序员派生出了 Manager 类和 Secretary 类。现在如果需要对 Employee 类的实现进行修改,如将 hireDay 修改为 private,通过 getHireDate 方法访问,这样就必须通知其他使用这个类的程序员不能再通过 this.hireDay 的方法访问。这违背了 OOP 提倡的数据封装原则
网友评论