吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1856|回复: 7
收起左侧

[Java 转载] 父对象与子对象的转换,请懂java的指导一下

[复制链接]
bigcan 发表于 2021-3-11 15:21
本帖最后由 bigcan 于 2021-3-11 15:43 编辑

image.png
本人常用的是C#,这里看不明白java的语法

在学习的时候看到java的转换,方法中这里RBNode是Node的子类,color 是RBNode子类的对象属性,这样转换,最后返回的是类又是Node,但是Node没有color属性的,这样是不是等于没操作啊?

C#肯定是编译不通过的,java看样子是能通过,而且返回的node变成了子类对象,这个是什么原理啊


查到原因,是java的特性,在思想上确实与C#有着极大的差异
https://segmentfault.com/q/1010000004847075

image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

LeagueJinx 发表于 2021-3-11 15:32
强制类型转换,向下转型,没有的属性,初始化为默认值
SpeII 发表于 2021-3-11 15:34
 楼主| bigcan 发表于 2021-3-11 15:36
LeagueJinx 发表于 2021-3-11 15:32
强制类型转换,向下转型,没有的属性,初始化为默认值

哪方法返回的是Node,Node根本就没有color属性,按我理解,这只能是个空操作,但实际看视频,返回的却是RBNode

在C#,Node必须声明为抽象类,才能这样,但看java代码,就是一个普通类,好晕
LeagueJinx 发表于 2021-3-11 15:43
对于引用类型到引用类型的强制类型转换,最终结果仅仅是显示上的区别无误,底下实际对象的状态不需要被改变。
关键点在于引用跟对象是两个独立的概念。引用可以指向对象,对象可以包含引用类型的字段进一步指向别的对象。强制转换的只是引用而不是对象。
陈腔滥调的K 发表于 2021-3-11 15:43
我也是用C#的,可以这样做啊,Node是父类,RBNode是子类,父类可以接收子类,但不意味着Node接收后内存里的RBNode就不是子类RBNode了,只是看不到子类的成员而已,另外不是父类就必须声明抽象
[C#] 纯文本查看 复制代码
    class BaseNode
    { }
    class RBNode : BaseNode
    {
        public Color mColor;
    }
        private BaseNode MakeNode(BaseNode node, Color color)
        {
            ((RBNode)node).mColor = color;
            return node;
        }

        private  void button1_Click(object sender, EventArgs e)
        {
            RBNode node = new RBNode();
            var item = MakeNode(node, Color.Red);
            this.button1.BackColor = ((RBNode)item).mColor;
        }
LeagueJinx 发表于 2021-3-11 15:44
可以想想关于Object类的转换
 楼主| bigcan 发表于 2021-3-11 15:45
陈腔滥调的K 发表于 2021-3-11 15:43
我也是用C#的,可以这样做啊,Node是父类,RBNode是子类,父类可以接收子类,但不意味着Node接收后内存里的 ...

好的,谢谢,明白了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 20:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表