父类可以包含私有成员变量,私有方法,子类继承不到,可以说父类范围大。。但是子类也可以有特有方法,也可以说子类范围大。那到底谁的范围大呢?为什么子类引用转换成父类引用是向下强制转换?

解决方案 »

  1.   

    extend就已经很好地说明了,子类范围大(这里所说的范围指内存空间)
    可见性只是限制访问,但是内存依然占用,也就是说子类的内存拥有一个完整的父类对象
    可以用发射的方式重新设置访问限制,一个子类对象可以访问父类的方法,但反过来,父类对象就访问不了子类的方法
      

  2.   

    父类,你看看Object类即可,所有的类基本上都继承于Object类,父类最大
      

  3.   

    如果父类的功能比你子类的功能还强大,你为什么要new一个子类出来
      

  4.   

    没有范围这个问题,只是因为java在表示类和类之间关系的时候,是采用阶梯式的描述,所以说向下强制转换
      

  5.   


    子类不是继承不了,而是不能直接访问,对象变量都是存在的
    所谓的谁的范围大谁的范围小,这个问题无法回答为什么子类引用转换为你类引用是向下强制转换?
    错了,是父类引用转换为子类引用才要求强制转换。
    象一个继承模型:水果、桃子、黄桃、苹果、红苹果、青苹果
    继承关系不用解释了吧
    你可以说一个苹果是一个水果,这是子类向父类转型,肯定是自动的
    如果你拿了一个水果,说它是苹果,这是向子类转型,这才需要强制转换
    所有,转型有几个规则就不难理解:
    子类向父类转型,是自动的,你可以写:水果 obj = new 苹果();
    父类向子因转换,需要强制,并且有可能失败,比如:
    水果 obj1 = new 苹果(); // 自动
    ......
    桃子 obj2 = (桃子)obj1; // 要求强制转换,编译可以通过,但运行时报类型转换失败
    兄弟之间转型不可以实现,比如
    桃子 obj = (桃子)(new 苹果()); // 编译错误
      

  6.   

    必须是父类,一个儿子只有一个爹,一个爹可以有很多儿子,Java支持的是单继承,