假设有父类Fu ,其子类为Zi ,从对象的内存角度,假设Fu类里面的变量占内存2M, Zi 类里的变量占内存1M:

Fu f = new Fu ();//系统将分配2M内存

Zi z = new Zi ();//系统将分配3M内存(2+1)

因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.所以z可以调用父类的方法.

Zi z1= z; //z1指向那3M的内存.

Fu f1 = (Fu)z;//这时f1会指向那3M内存中的2M内存,即是说,f1只是指向了z中实例的父类实例对象,所以f1只能调用父类的方法(存储在2M内存中),而不能调用子类的方法(存储在1M内存中).

Zi z2= (Zi)f;//这句代码运行时会报ClassCastException.因为f中只有2M内存,而子类的引用都必须要有3M的内存,所以无法转换

Zi z3= (Zi)f1;//这句可以通过运行,这时z3指向那3M的内存.由于f1是由z转换过来的,所以它是有3M的内存的,只是它指向3M中的2M内存,类型转换时,就可以拿到全部3M。

泛型类型由于没有Class类,所有无法new。只能用来类型强转

下面是一个类型转换的案例

Object[] ins= {  new Integer(0),  new Integer(1),  new Integer(2),  new Integer(3),  };  Integer[] i = (Integer[]) ins;  

执行时,系统报 
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

如果改成下面的方式就可以了:

  Object[] ins= {
        new Integer(0),
         new Integer(1),
         new Integer(2),
          new Integer(3),
  };     Integer[] i = new Integer[ins.length];  for(int k = 0; k < ins.length; k++){  i[k] = Integer.parseInt(ins[k].toString());  System.out.println(i[k]);  }  

为什么Object[]数组不能强转成Integer[]数组呢?

其实Object[]数组和Integer[]数组之前的关系并没有继承之间的关系,Integer[]的是Object的子类,并不是Object[]数组的子类.

Object[]数组是Object的子类.....

强转的话还是要一个个的对单独的元素进行强转.

为什么父类引用可以指向子类对象 子类引用不能指向父类对象 泛型相关推荐

  1. java父类引用子类_java多态,如何理解父类引用指向子类对象

    要理解多态性,首先要知道什么是"向上转型". 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求 ...

  2. 父类引用指向子类对象的问题,即父类 对象名=new 子类

    对于父类引用指向子类,先看下面一段代码 package chapter6_8;public class Father {private int m=10;public Father(){System. ...

  3. java父类引用子类属性_Java多态性详解——父类引用子类对象

    面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...

  4. java 父类获取子类对象_Java多态性详解 (父类引用子类对象)

    面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...

  5. C++ 指向子类的指针转型为指向父类类型指针之后指向的对象地址不变

    C++ 指向子类的指针转型为指向父类类型指针之后指向的对象地址不变 例子: class A{int a;int b; };class B:public A{int c; };int main(){B* ...

  6. 父类指针指向子类对象,子类指针不能指向父类对象

    class Parent { public:int a };class Child :public Parent { public:int b; }Parent类占内存大小范围:int a; 占4个字 ...

  7. 2020-12-16子类对象指针强转成父类对象指针,父类对象指针调用子类函数问题(待整理)

    当父类中声明某个函数为虚函数,并且子类重载了这个虚函数以后,用父类对象的指针可以调用子类的相应函数,但前提是该指针指向的对象是子类的对象,否则没有意义. 1.新建一个子类对象时,它首先执行它父类的构造 ...

  8. java 子类调用静态方法吗_Java子父类中静态方法

    Java中的静态方法只能继承,不能重写!! 官方文档是这样写的: Class methods If a subclass defines a class method with the same si ...

  9. python父类和子类_python子类父类

    1.类的定义 代码如下: 复制代码复制代码 !/usr/bin/env python coding:utf8 class Hotel(object): """docstr ...

最新文章

  1. Python 可视化近 90 天的百度搜索指数 + 词云图
  2. 图片剪切空指针崩溃问题在Android 6.0系统出现
  3. 使sqoop能够启用压缩的一些配置
  4. 【3.1】学习C++之再逢const
  5. 常用打开新页面的方法
  6. NetFramework各个版本的特性笔记
  7. 蓝桥杯 递增三元组 二分
  8. mysql sum很慢,可以在MySQL中加快sum()吗?
  9. 2015腾讯暑期实习笔试题目
  10. 【转】2.2【MySQL】运行原理(二):InnoDB 内存结构、磁盘结构及update sql执行过程分析
  11. 用matlab处理grib2,关于Matlab2017b读取GRIB2文件的问题
  12. 深入解读 MySQL 架构设计原理,剖析存储架构选型核心
  13. FASTQ format
  14. c# 类属性和方法
  15. 中英文对照 —— 计算机编程
  16. c语言程序仪表称重编程,基于WinCE的双台面动态汽车称重装置仪表设计
  17. 如何使用postman带Token测试接口?
  18. QQ IM架构学习总结
  19. 百度搜索引擎都有哪些算法
  20. 终于明白了AOP中的方面是什么意思

热门文章

  1. 01-什么是架构、架构的目的
  2. java大数据开发是做什么的
  3. Quartz 定时任务相关介绍表
  4. 物联网卡应用在哪些方面
  5. 使用pe系统 修复引导
  6. java 实现一个杨辉三角
  7. C语言初学 (两数相加求和)
  8. Linux服务器百万并发实现与问题排查
  9. textarea如何在展示时候显示多个空格和换行
  10. Gradle简单配置