Java继承与向上转型总结

  1. 子类只能继承一个父类
  2. 子类会继承父类的所有域,只是私有域无法访问与使用
  3. 父类对象的public域是所有类都可见的,而proteced域只能在本包与它的子类可见(注意的是子类对象只能访问它从父类继承的protected域,而不能访问父类对象的protected域),private域无法直接访问除非父类提供了public方法去访问
  4. 一般情况下父类可以实例成子类即向上转型Father father=new son();(因为子类对象中有父类所有的域);而子类不能实例化成父类Son son=new Fahter();(因为父类对象可能没有子类的所有域)
  5. 通过强制类型转换实现子类实例化为父类编译通过但执行时会报错java.lang.ClassCastException
        /**
         * Manager继承Person类,Manager中多了private域bonus
         * 一般情况下父类可以实例成子类即向上转型(因为子类对象中有父类所有的域),而子类不能实例化成父类(因为父类对象可能没有子类的所有域)
         * 特殊情况:
         * 两个数组,将persons引用指向managers,两者公用同一个Manager数组
         * 此时用persons[0]=new Person();就会实现父类实例化成为一个子类且不报错
         * 也就是Manager[0]被实例化成Person
         * 此时Manager[0].getBonus()会报错,因为调用了不存在的域
         */
        Manager[] managers=new Manager[2];
        Person[] persons=managers;
        persons[0]=new Person();
        managers[0].getBonus();
Son son=new Son();
Father father=new Father();
son=(Son)Father;


猜你喜欢

转载自www.cnblogs.com/ming-szu/p/9156318.html