首页 > 其他分享 >向下转型的话,可以访问的是父类还是子类的成员方法和成员属性?

向下转型的话,可以访问的是父类还是子类的成员方法和成员属性?

时间:2023-11-14 19:00:31浏览次数:42  
标签:User2 子类 成员 Object 转型 obj 向下 父类

前言:

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

正文:

向下转型(downcasting)是将父类的引用转换为子类的引用。例如,如果User2继承自Object,你可以这样做:

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

在这个例子中,objObject类型的引用,但它实际上引用的是一个User2对象。然后,我们将obj向下转型为User2类型的引用。

在向下转型之后,你可以通过user2引用访问User2类中定义的所有成员方法和成员属性,包括那些在Object类中定义的方法和属性。这是因为User2类是Object类的子类,所以它继承了Object类的所有方法和属性。

然而,你需要注意的是,向下转型有一定的风险。如果obj引用的实际对象不是User2类的实例,那么尝试向下转型就会抛出ClassCastException。为了避免这种情况,你通常会在向下转型之前使用instanceof操作符进行检查:

if (obj instanceof User2) {
User2 user2 = (User2) obj;
// 现在你可以安全地访问User2的方法和属性了
}

总结:

向下转型之后,你可以访问子类的所有成员方法和成员属性,包括继承自父类的那些。

其实跟子类新创建一个实例对象差不多。

标签:User2,子类,成员,Object,转型,obj,向下,父类
From: https://www.cnblogs.com/new-one/p/17832299.html

相关文章

  • 向上转型之后可以调用的成员方法和成员属性是父类的还是子类的?
    前言:对于多态的一些概念存在模糊,于是这次来挑一下特别容易误解的点。正文:在Java中,向上转型(upcasting)是将子类的对象引用赋给父类的引用。例如,如果User2继承自Object,那么你可以这样做:User2user2=newUser2();Objectobj=user2;//这就是向上转型在这个例子中,obj是O......
  • 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日,在华为开发者联盟的精心组织下,为期三天的鸿蒙生态师资培训营(以下简称“鸿蒙培训营”)上海站活动圆满落下帷幕。坚果派创始人坚果代表组织参加。这里坚果还有一个身份,就是江苏润开鸿数字科技有......