当前位置: 首页 > article >正文

《从C/C++到Java入门指南》- 22.对象的转型

对象的转型

向上转型

将子类型对象转换成父类型,称之为向上转型。

class People {}
class Teacher extends People {}


public class Main {
   
	 public static void main(String args[]) {
		 People teacher = new Teacher();
		 System.out.println("0");
	 }
}

这里将子类(Teacher)转换成了一个父类(People),将一个具体类转换成了一个抽象类。需要说明的是,向上转型是安全的。也就是说父类可以引用子类。

class People {
	int c = 4;
}
class Teacher extends People {
	public int a = 3;
}


public class Main {
	 public static void main(String args[]) {
		 People teacher = new Teacher();
//		 teacher.a = 3;	// 编译报错
		 teacher.c = 7;
		 System.out.println(teacher.c);
	 }
}

可以看出,转成父类后,只能调用父类拥有的方法和变量。

向下转型

向下转型是不安全的,举个例子,人不一定是老师,老师一定是人。如果将随便一个人随便任命为老师,很可能会出错。

class People {
}
class Teacher extends People {
}


public class Main {
	 public static void main(String args[]) {
		 Teacher tom = new People();
		 
	 }
}

显而易见的得到一个报错提示。但其实可以使用强制转型来向下转型,相当于告诉编译器:这个人就是个老师!

class Father {
}
class Child extends Father {
}


public class Main {
	 public static void main(String args[]) {
		 var father = new Father();
		 Child chlid = (Child) father;
	 }
}

编译器不会有错误提示,但是运行后会得到报错。

Exception in thread "main" java.lang.ClassCastException: class Father cannot be cast to class Child (Father and Child are in unnamed module of loader 'app')
	at Main.main(Main.java:10)

注意:没有继承关系的对象之间不可以进行转型操作。


http://www.kler.cn/news/289422.html

相关文章:

  • 机器学习面试题(9月3日笔记)
  • 跨境多账号登录如何防止IP、cookie和设备关联?
  • pil 常见用法
  • 如何打造在线音乐网站?java springboot架构,vue前端开发,音乐分享新体验
  • sealos快速搭建k8s集群
  • 记录 PyQt6 / PySide 6 自定义边框窗口的 Bug 及可能可行的解决方案:窗口抖动和添加 DWM 环绕阴影的大致原理
  • Java的IO模型详解-BIO,NIO,AIO
  • 常见接口限流算法
  • 4. 第一个3D案例—创建3D场景
  • idea中git提交或push到远程后回退到之前的某次提交简单有效的解决方案
  • go语言的闭包
  • gitea + drone实现CI/CD
  • 浅谈新能源汽车充电桩安装以及防范
  • Java中的类加载过程
  • 关于武汉高芯coin417G2红外机芯的二次开发
  • AFFiNE简介
  • 代码随想录八股训练营第三十二天| C++
  • SQL 编程基础
  • 一阶微分方程的解的存在唯一性定理
  • day06 1.继承和多态
  • 【JavaEE初阶】计算机是如何运行的?
  • 缓存分布式一致性问题
  • OpenCV下的视频和帧图片转换(Video2FrameFrame2Video, VideoCaptureVideoWriter)
  • 游戏翻译中西班牙语的特点
  • Kafka【四】Controller的选举机制
  • Storm计算框架
  • 结构体的使用
  • C#串口助手初级入门
  • Oracle 19C管理控制文件
  • 达梦SQL 优化简介