首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果一个子类的字段隐藏了一个与超类同名的字段,那么这两个字段在内部到底发生了什么?

当一个子类的字段隐藏了一个与超类同名的字段时,这两个字段在内部发生了字段隐藏的现象。

字段隐藏是指子类中定义的字段会隐藏超类中同名的字段,使得在子类中无法直接访问超类中的字段。这意味着,当通过子类对象访问该字段时,实际上访问的是子类中的字段,而不是超类中的字段。

在内部,当子类对象访问该字段时,编译器会根据对象的类型确定要访问的字段。如果访问的是子类对象,则会使用子类中的字段;如果访问的是超类对象,则会使用超类中的字段。

这种字段隐藏的机制可以让子类在需要时重新定义或修改超类中的字段,以满足子类的特定需求。但需要注意的是,字段隐藏并不会影响超类中的字段,超类中的字段仍然存在,只是在子类中无法直接访问而已。

对于这个问题,由于不能提及具体的云计算品牌商,无法给出腾讯云相关产品和产品介绍链接地址。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你真的了解Override吗,属性能够被重写吗?

答案跟我们预料一样,输出结果如下: Sub Super 不觉得奇怪吗?我们确实创建了两个Sub对象,但是为什么第二个输出结果却是Super。Override在你心目中是不是一个惊叹号?...还是一个句号? 你脑袋里是不是充满了问号? 上面的例子中定义一个隐藏字段。在中,字段具有相同名字段隐藏字段,即使它们类型不同。在子类中,父字段不能通过其简单名称引用。...相反,该字段必须通过父访问。一般来说,我们不建议隐藏字段,因为它使代码难于阅读。 从这个定义中,成员字段不能像方法一样被重写。当子类定义具有相同名字段时,该子类仅声明一个字段。...字段隐藏。它没有被重写,所以它不能被多态访问。 那么,怎样去访问隐藏字段呢?...有两种方法可以供选择: 就像上面的例子c2.s一样,通过申明父去调用 将子类强制转化成父类型再来调用:((Super)c1).s 最后,实际开发中就不要申明隐藏字段,毕竟这种代码容易引起误解。

68640

你真的了解Override吗,属性能够被重写吗?

答案跟我们预料一样,输出结果如下: Sub Super 不觉得奇怪吗?我们确实创建了两个Sub对象,但是为什么第二个输出结果却是Super。Override在你心目中是不是一个惊叹号?...还是一个句号? 你脑袋里是不是充满了问号上面的例子中定义一个隐藏字段。在中,字段具有相同名字段隐藏字段,即使它们类型不同。在子类中,父字段不能通过其简单名称引用。...相反,该字段必须通过父访问。一般来说,我们不建议隐藏字段,因为它使代码难于阅读。 从这个定义中,成员字段不能像方法一样被重写。当子类定义具有相同名字段时,该子类仅声明一个字段。...字段隐藏。它没有被重写,所以它不能被多态访问。 那么,怎样去访问隐藏字段呢?...有两种方法可以供选择: 就像上面的例子c2.s一样,通过申明父去调用 将子类强制转化成父类型再来调用:((Super)c1).s 最后,实际开发中就不要申明隐藏字段,毕竟这种代码容易引起误解。

79320
  • 【趣学程序】java面向对象三大特征

    封装 封装两个含义: 把对象状态和行为看成一个统一整体,将二者存放在一个独立模块中(); "信息隐藏", 把不需要让外界知道信息隐藏起来,尽可能隐藏对象功能实现细节,字段; 封装机制在程序中体现是...:把描述对象状态用字段表示,描述对象行为用方法表示, 把字段和方法定义在一个中,并保证外界不能任意更改其内部字段值,也不允许任意调动其内部功能方法。...让之间产生关系,有这个继承关系才有多态特性。 Java语言中只支持单继承(有别于C++语言)。...:" + s.getNumber()); } } 总结:子类关系: 子类拓展父子类是父一种特殊情况) 主要是以父为基础,然后添加属于自己字段和方法。...注意: 父私有成员子类不能继承到;父构造方法不能被继承; Java只支持单继承,不支持多继承;//不然的话,比如show方法,继承多个,不知道到底调用那一个

    38420

    Java面向对象三大特性(封装、继承、多态)

    而且一旦实现者把name这两个字段修改成myName,外部就无法调用了,那么调用者就需要大量修改代码,维护成本就非常高了。...那么问题来了,我们前面说过 private 修饰字段只能在当前中使用。也就是说现在我们访问不到了name和age。...3.隐藏实现 实现过程对调用者是不可见调用者只需调用方法即可,不知道具体实现。 二、继承 1...., 我们称为 父 , 基, 对于像 Cat 和 Bird 这样, 我们称为 子类,或者派生 和现实中儿子继承父亲财产类似, 子类也会继承父字段和方法, 以达到代码重用效果...这个注解可以帮助开发人员进行检查 (4) 动态绑定一个坑 来看一段代码,我们实例化一个Cat,因为Cat是子类,所以要帮父先构造,那么在父构造方法里有一个 eag 方法,那么会执行哪个

    30230

    Java基础语法(八)——面向对象

    不过这种方式属于是对访问权限滥用, 还是更希望同学们能写代码时候认真思考, 该类提供字段方法到底给 “谁” 使用(是内部自己用, 还是调用者使用, 还是子类使用)....向上转型 就是 把子类那么到底什么意思呢?...(2)发生时机 那么什么情况下 我们 可以用到 向上转型呢? 直接赋值 就是我们在上面举例情况 直接把子类对象 赋值给引用,那么这种情况就叫做 直接赋值。...向下转型,使用情况不多,因为使用向下转型非常不安全 3.动态绑定 当子类和父中出现同名方法时候, 再去调用会出现什么情况呢?...Java当中 发生多态主要是 1.子类重写父方法,一个方法可以表现出不同内容,这就发生了多态 2.多个实现一个接口,对其方法进行实现。 和上面的一样。

    32030

    Java面向对象问题汇总

    1.3、多态 多态是指程序中定义引用变量所指向具体类型和通过该引用变量发出方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个实例对象,该引用变量发出方法调用到底是哪个中实现方法...1.5、为什么是单继承而不能多继承呢? 如果一个子类继承多个父中拥有相同名实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父变量。...如果一个子类继承多个父中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父方法。 1.6、为什么是多实现呢?...3、内部类 3.1、什么是内部类 内部类就是定义在另外一个里面的。它隐藏在外部类中,封装性更强,不允许除外部类外其他访问它。但它可直接访问外部类成员。...如果定义为final,java会将这个变量复制一份作为成员变量内置于内部类中,通过final关键字可得到一个外部变量引用。通过final关键字也不会在内部类去做修改该变量值,保护数据一致性。

    37430

    Java 小白成长记 · 第 6 篇「为什么说要慎用继承,优先使用组合」

    另外,一定要注意是:「在覆盖一个方法时候,子类方法不能低于父方法可见性」。特别是, 如果方法是 public, 子类方法一定要声明为 public。...如果没有无参构造函数, 并且在子类构造器中又没有显式地调用其他构造器,则 Java 编译器将报告错误。 ❞ 需要注意是:「父构造函数总是先于子类构造函数执行」。...那么多继承到底带来什么坑?其实也不难理解: 如果一个子类拥有多个父的话,那么当多个父中有重复属性或者方法时,子类调用结果就会含糊不清,也就是存在「二义性」。因此 Java 使用了单继承。...更危险是,错误不一定能轻易地被测出来,如果开发者不了解实现细节就进行重写,那么可能就埋下了隐患。...说到这里,大家大概了解了为什么说要慎重使用继承了吧,「如果使用继承和组合都可以处理某种情况,那么优先使用组合」,组合完美的解决上述继承缺点。

    93120

    Java 中文官方教程 2022 版(四)

    你可以在子类中声明一个中相同名字段,从而隐藏它(不建议)。 你可以在子类中声明中没有的新字段。 继承方法可以直接使用。...你可以在子类中编写一个实例方法,其签名方法相同,从而覆盖它。 你可以在子类中编写一个静态方法,其签名方法相同,从而隐藏它。...有关@Override更多信息,请参见Annotations。 静态方法 如果一个子类定义一个中静态方法相同签名静态方法,则子类方法隐藏方法。...如果您尝试将实例方法更改为子类静态方法,或者反之,则会收到编译时错误。 总结 以下表格总结了当您定义一个中方法具有相同签名方法时会发生什么。...定义一个方法具有相同签名方法 实例方法 静态方法 子类实例方法 覆盖 生成编译时错误 子类静态方法 生成编译时错误 隐藏 注意:在子类中,您可以重载从继承方法。

    18700

    Java学习之类继承

    继承 1,什么?...否则,子类不能继承。 对于子类能继承成员变量。如在子类中出现同名成员变量,则会发生隐藏现象。即子类成员变量会屏蔽掉父同名成员变量。...即子类成员方法会覆盖掉父同名成员方法。若要在子类中访问父同名成员方法,需要使用super关键字引用。 注:隐藏覆盖不同。隐藏是针对成员变量和静态方法,覆盖是针对普通方法。...B中有一个和父一样字段(也可以说成父字段隐藏),为了获得父这个字段我们就必须加上super,如果没有加,直接写成name= name;不会报错,只是会警告,表示此条语句没有任何意义,因为此时都是访问子类...因此,super作用主要在下面三种情况下: 1、调用父子类重写方法; 2、调用父子类重定义字段(被隐藏成员变量); 3、调用父构造方法; 其他情况,由于子类自动继承相应属性方法

    53420

    C#基础知识系列七(base、this、new、override、abstract、virtual、static)

    如果使 用 new 显式隐藏成员,则会取消此警告,并记录要替换为派生版本这一事实。 ? 在子类中用 new 关键字修饰 定义同名方法,叫覆盖。 覆盖不会改变父方法功能。...virtual使用会有两种情况: 情况1:在基中定义virtual方法,但在派生中没有重写该虚方法。那么在对派生实例调用中,该虚方法使用是基定义方法。...情况2:在基中定义virtual方法,然后在派生中使用override重写该方法。那么在对派生实例调用中,该虚方法使用是派生重写方法。...static字段和static构造函数 主要来说明执行顺序:   1、编译器在编译时候,先分析所需要静态字段如果这些静态字段所在有静态构造函数,那么就会忽略字段初始化;如果没有静态构造函数...2、如果存在多个静态那么初始化静态成员顺序会根据引用顺序,先引用到先进行初始化,但如果静态成员初始化依赖于其他静态成员,则会先初始化被依赖静态成员。

    64520

    「JAVA」面向对象三大特征:封装、继承、多态,以高内聚、低耦合为目标

    低耦合:该模块只需要给外界暴露少量功能方法;模块之间相互依赖程度不高; 封装 什么是封装 把对象状态和行为看成一个统一整体,将二者存放在一个独立模块中,比如:; 细节隐藏, 把不想对外公开实现细节隐藏起来...super关键字用于显式调用父方法、构造器和字段;可以使用super解决子类隐藏字段情况; 在子类方法中,调用父被覆盖方法; 在子类构造器中,调用父构造器。...继承中隐藏 上文中提到了隐藏概念,继承中隐藏表示会忽略一些特征和方法,比如静态字段和静态方法: 满足继承访问权限下,隐藏静态方法:若子类定义静态方法签名和静态方法签名相同,那么此时就是隐藏方法...满足继承访问权限下,隐藏字段:若子类中定义字段和父字段名相同(忽略数据类型),此时是隐藏字段,但是可以通过super访问被隐藏字段。...组合关系(has a) 在继承关系中,子类可以继承到父中部分成员,那么此时子类是可以修改到父信息,此时继承关系破坏了封装,让子类拥有本不该具有的功能。

    1K40

    《重构》第十一章 - 读后感(处理概括关系)

    1.字段上移 两个子类有相同字段那么就该字段移到父中! 2.函数上移 有些函数在各个子类中产生完全相同结果,将该函数移动到!避免行为重复是很重要,尽管重复自身只会成为错误源泉。...4.函数下移 中某个函数只部分子类有关,那么就应该将这个函数移动到相关子类中去。这块也从侧面表示我们在使用继承时,应该尽量将一些共性东西放到父定义,而将特性放到子类中去。...7.提炼 如果两个有相似的特点,那么就应该给这两个建立一个,将其相同特性移动到中。...因此我们可以将不同类相同接口提炼出来形成一个共有的接口。接口存在往往能够让代码看起来清晰。 9.折叠继承体系 如果子类之间并没有什么区别,那么就将它们合并吧!...11.以委托取代继承 某个子类只使用接口一部分,或者根本不需要继承而来数据,那么子类中新建一个字段用来保存,调整子类函数,使它改为委托;然后去掉两者之间继承关系。

    67230

    面向对象——继承

    1.什么是继承 继承是从已有中派生出新,新吸收已有当中状态和行为并扩展出新能力,是一种从一般到特殊关系 父存放共同状态和行为,子类存放自己特有的状态和行为 java中通过extends...关键字来继承:public class 子类名 extends 父名{ 编写子类自身特有的状态和行为 } ?...2.继承作用 减少了代码冗余提高复用性 划分类别清晰化结构 3.继承方法重写 重写方法签名要一样(方法名+参数) 重写方法返回值类型要和父一样 重写方法访问权限必须要比父方法大或者相等...在方法前添加@Override标签可判断该方法是否是重写方法 4.隐藏 本类字段隐藏:方法参数名字段名相同时 继承字段隐藏子类有定义字段名和父字段同名 继承方法隐藏子类有一静态方法和父类同名...这里是静态方法而不是实例方法 5.继承内存分析 载入字节码到方法区时会先将父载入然后再载入自身 创建对象时构造方法里默认会有super()来调用父构造方法,即创建对象时在堆中会先开辟一个对象然后再此对象

    45120

    Java基础-Java中为什么字段不能被重写

    隐藏字段代替重写 在java官方提供tutorial有一段关于隐藏字段明确定义: Within a class, a field that has the same name as a field...当一个子类定义一个跟父相同 名字字段子类就是定义一个字段。这个字段在父中被隐藏,是不可重写。...如何访问隐藏字段 采用父引用类型,这样隐藏字段就能被访问了,像上面所给出例子一样。 将子类强制类型转化为父类型,也能访问到隐藏字段。 ?...小结: 这个主要涉及到java里面一个字段隐藏概念,父子类定义一个同名字段,不会报错。...但对于同一个对象,用父引用去取值(字段),会取到父字段值,用子类引用去取值(字段),则取到子类字段值。

    53420

    dubbo之hessian序列化数据丢失

    最近有同事来找我,说同一个model中有一个字段值无法传递到调用方,其它字段都可以传递过去,什么,还有这样事,瞬间懵逼了,于是就想着是不是他给到客户端API和他自己不一致,是不是没有get和set...在找不到原因时,先添加一个字段进行尝试,发现新加字段是有值。该字段相较于其它字段较特殊地方是子类和父有相同字段,去掉继承,发现字段能够顺利传递过去了。...NULL,观察发现在子类、父同名属性时会出现。...解决方法 比较简单办法: 避免在子类中出现父类同名属性 然并卵,现实中往往还是会出现,再想想办法: 找一个没有BUG得HESSION版本或者自己动手改改代码重新打个包 相对简单改法是:在出现同名时...,如果子类中已经有那么中对应属性直接忽略,代码量很少,只需要加一个 continue 即可,但是这样改容易挖坑。

    1.7K10

    重构-改善既有代码设计:坏代码味道,编写代码20多宗罪(三)

    但是对象真正力量在于它们可以包含作用于数据行为类型或操作。 解决方法 如果一个有公共字段,你应该运用 封装字段(Encapsulated Field) 来隐藏字段直接访问方式。...如果某个类经常因为不同原因在不同方向上发生变化,发散式变化(Divergent Change)就出现那么此时也许将这个对象分成2个会更好,这么一来每个对象就可以只因1种变化而需要修改。...内幕交易 ​ 23、Refused Bequest(被拒绝遗赠) 子类仅仅使用父部分方法和属性。其他来自父馈赠成为了累赘。 子类应该继承函数和数据。...这样一来,就只持有所有子类共享东西。你常常会听到这样建议:所有都应该是抽象。既然使用“传统说法”这个略带贬义词,你就可以猜到,我们不建议你这么做,起码不建议你每次都这么做。...如果子类复用了行为,却有不愿支持接口,Refused Bequest坏味道就会变得浓烈。拒绝继承实现, 这点我们不介意;但如果拒绝继承接口,我们不以为然。

    60820

    何时应该重构代码?如何重构代码?

    如果只是在单一函数中有些选择实例,且并不想改动它们,那么多态就有点杀鸡用牛刀。 11.平行集成体系 每当你为某个增加一个子类,必须也为另一个相应增加一个子类。...封装public字段; 恰当封装容器字段; 移除不应修改字段设置函数; 提炼调用函数以隐藏取值/设值函数; 21.被拒绝遗赠 子类只运用了父一部分函数和数据。...八.处理概括关系 1.字段上移 两个子类拥有相同字段。将该字段移至。 2.函数上移 有些函数在各子类中产生完全相同结果。将该函数移至。...3.构造函数本体上移 各个子类中有一些构造函数本体几乎完全一致 。在中新建一个构造函数,并在子类构造函数中调用它。 4.函数下移 某个函数只部分(而非全部)子类用到。...新建一个子类,将上述部分特性移到子类中。 7.提炼 两个有相似特性。为这两个建立一个,将相同特性移至。 8.提炼接口 若干客户使用接口中同一子集,或两个接口有部分相同。

    1.7K30

    这代码写太烂了!你以为我真想写“垃圾代码”吗?

    如果只是在单一函数中有些选择实例,且并不想改动它们,那么多态就有点杀鸡用牛刀。 11、平行集成体系 每当你为某个增加一个子类,必须也为另一个相应增加一个子类。...封装public字段; 恰当封装容器字段; 移除不应修改字段设置函数; 提炼调用函数以隐藏取值/设值函数; 21、被拒绝遗赠 子类只运用了父一部分函数和数据。...八、处理概括关系 1、字段上移 两个子类拥有相同字段。将该字段移至。 2 、函数上移 有些函数在各子类中产生完全相同结果。将该函数移至。...3 、构造函数本体上移 各个子类中有一些构造函数本体几乎完全一致 。在中新建一个构造函数,并在子类构造函数中调用它。 4、函数下移 某个函数只部分(而非全部)子类用到。...新建一个子类,将上述部分特性移到子类中。 7、提炼 两个有相似特性。为这两个建立一个,将相同特性移至。 8、提炼接口 若干客户使用接口中同一子集,或两个接口有部分相同。

    97830

    狗屎一样代码!快,重构我!

    如果只是在单一函数中有些选择实例,且并不想改动它们,那么多态就有点杀鸡用牛刀。 11、平行集成体系 每当你为某个增加一个子类,必须也为另一个相应增加一个子类。...封装public字段; 恰当封装容器字段; 移除不应修改字段设置函数; 提炼调用函数以隐藏取值/设值函数; 21、被拒绝遗赠 子类只运用了父一部分函数和数据。...(八)处理概括关系 1、字段上移 两个子类拥有相同字段。将该字段移至。 2 、函数上移 有些函数在各子类中产生完全相同结果。将该函数移至。...3 、构造函数本体上移 各个子类中有一些构造函数本体几乎完全一致 。在中新建一个构造函数,并在子类构造函数中调用它。 4、函数下移 某个函数只部分(而非全部)子类用到。...新建一个子类,将上述部分特性移到子类中。 7、提炼 两个有相似特性。 为这两个建立一个,将相同特性移至。 8、提炼接口 若干客户使用接口中同一子集,或两个接口有部分相同。

    1.1K40

    RefactoringGuru 代码异味和重构技巧总结

    除此之外,它们是空。 被拒绝继承 如果子类只使用从其父继承一些方法和属性,那么层次结构就不正常。不需要方法可能只是不使用,或者被重新定义并发出异常。...耦合器 这一组中所有异味都会导致之间过度耦合,或者显示如果耦合被过度委托所取代会发生什么。 功能依赖 一个方法访问另一个对象数据多于它自己数据。...中间人 如果一个只执行一个操作,将工作委托给另一个那么它为什么存在呢? 其他异味 不完善 库迟早会停止满足用户需求。由于库是只读,所以问题唯一解决方案,也就是更改库,通常是不可能。...内联 问题:一个几乎什么都不做,也不负责任何事情,也没有为它规划额外责任。 解决方案:将所有功能从该类移动到另一个隐藏委托关系 问题:客户端从对象 A 字段或方法中获取对象 B。...如果需要用类型代码替换字段值,则另一个状态对象为“已插入”。 用字段替换子类 问题:你子类只在(常量返回)方法上有所不同。 解决方案:用父字段替换方法,并删除子类

    1.8K40
    领券