Java cast_java concat方法
大家好,又见面了,我是你们的朋友全栈君。
在说ClassCastException之前,先介绍下引用类型转换;
引用类型转换分为向上转型和向下转型两种;
向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的;当父类引用指向一个子类对象时,便是向上转换;
使用格式:
父类类型 变量名 = new 子类类型();
向下转型:父类类型向子类类型向下转换的过程,这个过程时强制;一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制转换的格式,便是向下转换;
使用格式:
子类类型 变量名 = (子类类型) 父类变量名;
转型的目的:
当使用多态方式调用方法时,首先检查父类是否有该方法,如果没有,则编译错误,即父类不能调用子类拥有的,而父类没有的方法;编译都错误,更别说运行,要想调用子类特有的方法,必须做向下转型;
转型示例代码:
定义类:
abstract class Animal {
abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println(“吃鱼”);
}
public void catchMouse() {
System.out.println(“抓老鼠”);
}
}
class Dog extends Animal {
public void eat() {
System.out.println(“吃骨头”);
}
public void watchHouse() {
System.out.println(“看家”);
}
}
测试类:
public class Test {
public static void main(String[] args) {
// 向上转型
Animal a = new Cat();
// 调用的是 Cat 的 eat
a.eat();
// 向下转型
Cat c = (Cat)a;
// 调用的是 Cat 的 catchMouse
c.catchMouse();
// 向下转型
Dog d = (Dog)a;
// ClassCastException异常
d.watchHouse();
}
}
上面这段代码可以编译,但在运行时,会报ClassCastException异常;
ClassCastException: 当试图将对象强制转换为不是实例的子类时,抛出该异常;
上面的测试类中创建了Cat类型对象,运行时不能转换成Dog对象的,这两个类型并没有任何继承关系,不符合类型转换的定义 ,因此会抛出ClassCastException异常;
为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,格式如下 :
变量名 instanceof 数据类型
如果变量属于该数据类型,返回true;如果变量不属于该数据类型,返回false;
可以使用instanceof将上面的测试类修改如下:
public class Test {
public static void main(String[] args) {
// 向上转型
Animal a = new Cat();
// 调用的是 Cat 的 eat
a.eat();
// 向下转型
if (a instanceof Cat) {
Cat c = (Cat)a;
c.catchMouse();
} else if (a instanceof Dog) {
Dog d = (Dog)a;
d.watchHouse();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/197326.html原文链接:https://javaforall.cn
相关文章
- java解析xml方法_详解Java解析XML的四种方法
- java除法保留两位小数_JAVA除法保留小数点后两位的两种方法
- java 四舍五入运算_JAVA正确的四舍五入方法「建议收藏」
- java 删除目录下所有文件_Java删除文件、目录及目录下所有文件的方法实例
- java中打印数组的方法_Java数组方法–如何在Java中打印数组
- java反转数组_Java实现数组反转翻转的方法实例
- java图书馆新地址_最受Java开发者喜爱的5款开源IDE盘点
- java游戏开发入门教程_JAVA制作游戏入门教程
- java ee简介_Java EE 简介
- java dom4j 添加节点_Java dom4j获取,添加,删除,查找,设置Element节点方法「建议收藏」
- java中random方法取值范围_Java Random.nextInt()方法,随机产生某个范围内的整数
- java常量池在方法区还是堆_JAVA常量池
- 【说站】java反射三种方法
- 【说站】java泛型方法的语法使用
- java的栈内存和堆内存_Java本地方法栈
- JAVA获取当前时间的三种方法
- java notifyall_Java Thread notifyAll()方法[通俗易懂]
- Java 8 的 java.util.function.* POJO 的反射新方法
- java url加密_Java实现url加密处理的方法示例
- java mutator,Java – 使用Accessor和Mutator方法「建议收藏」
- Java map转实体类_java实体类转json
- https://haobin.work/2021/04/30/并发/Java线程池异常处理/
- java生成随机数方法大全(可指定范围、分布方式、类型、种子)详解编程语言
- java 中的valueOf方法和强转详解编程语言
- 实现Linux上的Java环境:从安装到配置(linux安装java环境)
- Java Map.putAll()方法:追加另一个Map对象到当前Map集合
- 版本Linux查看Java版本的简单方法(linux 查看java)
- Java应用在Linux上乱码的原因及解决方法(java linux乱码)
- windows下java环境变量的设置方法
- Java输入流Scanner/BufferedReader使用方法示例
- Java从控制台接受输入字符的简单方法