首页 > 其他分享 >向上转型之后可以调用的成员方法和成员属性是父类的还是子类的?

向上转型之后可以调用的成员方法和成员属性是父类的还是子类的?

时间:2023-11-14 18:55:59浏览次数:36  
标签:obj 子类 成员 Object User2 父类 方法

前言:

对于多态的一些概念存在模糊,于是这次来挑一下特别容易误解的点。

正文:

在Java中,向上转型(upcasting)是将子类的对象引用赋给父类的引用。例如,如果User2继承自Object,那么你可以这样做:

User2 user2 = new User2();
Object obj = user2;  // 这就是向上转型

在这个例子中,objObject类型的引用,但它实际上引用的是一个User2对象。

现在,如果你通过obj引用来访问成员方法或成员属性,你只能访问那些在Object类中定义的方法和属性。也就是说,你只能访问obj引用类型(即Object)所允许的方法和属性,而不能访问User2类中特有的方法和属性。这是因为在编译时,编译器只知道objObject类型的,所以它只允许你调用Object类中存在的方法。

然而,如果User2类重写了Object类的某个方法(例如toString方法),那么当你通过obj引用调用这个方法时,会调用User2类中的版本,而不是Object类中的版本。这是因为Java支持动态绑定(dynamic binding),也称为后期绑定(late binding)或运行时多态(runtime polymorphism)。在运行时,JVM会根据obj引用的实际对象类型来决定调用哪个版本的方法。

总结:

成员属性看的是父类
向上转型之后,你只能调用父类中定义的方法和属性,但如果子类重写了父类的方法,那么会调用子类的版本。
也就是说有看的是能够重写的方法,子类有重写的方法看子类,没有重写的方法看父类。
但是不会看子类特有的方法!

标签:obj,子类,成员,Object,User2,父类,方法
From: https://www.cnblogs.com/new-one/p/17832294.html

相关文章

  • timestamp(6)详解 在MySQL中,timestamp是一种时间戳类型。timestamp(6)是timestamp类型
    timestamp(6)详解在MySQL中,timestamp是一种时间戳类型。timestamp(6)是timestamp类型的一个子类型,表示精确到秒后6位小数的时间戳。它占用8个字节存储空间一、什么是timestamp(6)在MySQL中,timestamp是一种时间戳类型。timestamp(6)是timestamp类型的一个子类型,表示精确到秒后6......
  • 给层级目录添加分类父类(父类为临时组合节点,非数据库数据)
    @DatapublicclassTreeimplementsSerializable{privatestaticfinallongserialVersionUID=1L;/**节点主键*/privateLongpkId;/**节点ID*/privateStringid;/**节点父ID*/privateStringpId;/**节点名称*/privateStringname;/**节点标题*/......
  • C++中的const成员变量和成员函数
    在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const可以用来修饰成员变量和成员函数。const成员变量const成员变量的用法和普通const变量的用法相似,只需要在声明时加上const关键字。初始化const成员变量只有一种方法,就是通过构造函数的初始化列表,这点在......
  • 设置成员操作符--inside
     设置成员操作符–insideSystemVerilog增加了一个检测是否集合中–员的操作符,这个操作符的关键字是inside。logic[2:0]a;if(ainside{3'b001,3'b010,3'b100})//等价if((a==3'b001)||(a==3'b010)||(a==3'b100))...使用inside操作符可以方便的比较一个数值和多个可能值......
  • 内部类:成员内部类、静态内部类、局部内部类、匿名内部类
     成员内部类  ......
  • 子类对象创建过程
     ......
  • Git_设置分支保护,禁止成员向保护分支push
    1、设置保护分支进入仓库分支列表 选择要设置的分值,点击编辑->分支属性选择“保护分支”2、设置保护分支规则进入仓库管理->点击保护分支设置->新建规则 设置仓库push权限和合并权限 保存后查看作用分支不为0,表示设置生效 3、验证权限在本地直接向master分支push......
  • std::sort 传入成员函数指针报错的解决方案
    问题引入有一个类A,A的某个成员函数需要对A的某些变量进行std::sort,同时要调用A的另一个成员函数作为比较器。如代码所示:structA{vector<int>pos={0,4,2,5,3};boolcmp(intx,inty){returnpos[x]<pos[y];}voiddemo(){vector<int>a={2......
  • 助力鸿蒙生态建设|坚果派6位华为HDE以及若干成员喜获HarmonyOS专业证书
    助力鸿蒙生态建设|坚果派6位华为HDE以及若干成员喜获HarmonyOS专业证书2023年10月25日-27日,在华为开发者联盟的精心组织下,为期三天的鸿蒙生态师资培训营(以下简称“鸿蒙培训营”)上海站活动圆满落下帷幕。坚果派创始人坚果代表组织参加。这里坚果还有一个身份,就是江苏润开鸿数字科技有......
  • Objectarx Wizards 2010中添加成员变量功能移植到Objectarx Wizards 2018中
     ——工欲善其事必先利其器 虽然AutoCADObjectarx代码没写几行,但对于ObjectarxWizards的折腾却不能少。这几天学习Com封装,找到一篇文章(教程),学习过程中发现原来ObjectarxWizards中添加成员变量的功能不错,可惜在高版本中给阉割了,于是想着能不能把此功能从低版本移植到高版......