JAVA向上转型和向下转型(一)

本文深入探讨了Java中对象与引用的概念,解释了m、l和human等标识符实际上是对象的引用而非对象本身,并介绍了向上转型与向下转型的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   在我们工作的时候通常会看到这样的代码:

   Map<String,Object> m = new HashMap<String,Object>();

   List<Object> l = new ArrayList<Object>();


   question1: m和 l 是 对象吗?不要急于回答问题,请看下面两行代码:


    Human human;

    human = new Human("亚当");

   这两行代码等同于:Human human = new Human("亚当");


   question2:我们知道在Java中new是用来在堆上创建对象用的,如果human是一个对象的话,为什么还要再通过new来   创   建呢?如果不是对象,那么human是什么?如同question1中所问: m和l是什么?OK! 有点迷惑吧(大牛请忽略!!!),来跟着我把下面一段话读一遍:


“每种编程语言都有自己的数据处理方式。有些时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象。所有这些在 Java 里都得到了简化,一切都被视为对象。因此,我们可采用一种统一的语法。尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“引用”(reference)。”——《JAVA编程思想》

 

 错,m、l和 human 不是对象,他们是对象的引用变量,human是指向“亚当”对象(Human 类的一个实例)的引用。他们不在堆中,一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。

 

  现在我创建一个两个类 Man和 Woman  继承 Human。请看下面代码:

  Human  h

  h = new Man("亚当")

  创建了一个 Human的引用 h 然后又将h指向了一个Man对象的实例(亚当);一个父类引用指向了一个子类对象,也就是说把子类转化成了父类来用,这就叫做“向上转型”。   什么是向下转型呢?

 向下转型:父类引用的对象转换为子类类型称为向下转型。请看向下转型的例子:

  1. Man m = (Man) h;

  2. Human h1 = newHuman("夏娃");

  3. Woman m = (Woman)h1;

 

 

 未完待续!!!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值