网站首页 > java教程 正文
java对象的类型转换对于初学者来说很多时候是蒙的,例如当初开始学的我,#手动狗头。在整理以前学的笔记的时候看到了注释要重点看,在想想自己好像几个月没有更新了,今天来水一下java类型转换问题。
1.知识速记

Java 转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象。
Java转型分为向上转型和向下转型
向上转型(up casting):父类引用指向子类对象,我们称这个过程为向上转型,属于自动类型转换。向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方法。
向下转型(down casting):将父类转化为子类。需要强制类型转换。在向下转型的时候我们常常用到java关键字instanceof。
instanceof关键字语法格式:对象(或者对象引用变量) instanceof 类(或接口)
先来说一下向上转型。
2.向上转型:属于自动类型转换
通俗地讲即是将子类对象转为父类对象。此处父类对象可以是接口。
直接看代码:
运行结果输出:bird eatting...
注意:虽然b是Bird对象向上转型得到的,但因为它此时属于Animal类,并未实现子类的fly()方法,所以不能使用b.fly();此时可以看做是一种“瘦身”。
3.向下转型:需要强制类型转换
与向上转型相反,即是把父类对象转为子类对象。
直接看代码:
public class DownCasting {
public static void main(String[] args) {
//向上转型,子类对象转为父类对象。b对象没有fly()方法
Animal b = new Bird();
//向下转型,父类对象转为子类对象。bird对象拥有eat()和fly方法
Bird bird = (Bird) b;
bird.eat();//现在bird还是指向 Bird对象
bird.fly();
/*Dog dog = (Dog) b;
dog.eat();
//出错,java.lang.ClassCastException
//注意:编译没有错,但是运行时会报错
*/
//这种情况java提供关键字instanceof来判断防止出现异常
if (b instanceof Dog){
Dog dog = (Dog) b;
dog.eat();
}else {
System.out.println("该对象的类型不是Dog!");
}
}
}
//定义接口Animal
interface Animal{
void eat();
}
//定义Bird类实现Animal接口
class Bird implements Animal {
//实现接口eat()方法
public void eat(){
System.out.println("bird eatting...");
}
//定义Bird特有fly()方法
public void fly(){
System.out.println("bird flying...");
}
}
//定义Dog类实现Animal接口
class Dog implements Animal{
//实现接口eat()方法
public void eat() {
System.out.println("Dog eatting...");
}
}
运行结果:
bird eatting...
bird flying...
该对象的类型不是Dog!
4.总结
Java转型:父类引用指向子类对象。
向上转型属于自动转型。
向下转型需要强制转型,注意异常ClassCastException。我们需要先用instanceof判断。
5.每篇文末一个干货
逻辑运算符:
逻辑 &(与) |(或) !(非) ^(异或)
短路 && (短路与) || (短路或)
区别:& : 不论左边真假,右边都要进行运算
&& :如果左边为真,右边参与运算,如果左边为假,那么不参与运算 。
| 和 || 区别同理 。
最后,我自己是一名从事了多年开发的JAVA老程序员,辞职目前在做自己的java私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的java学习干货,可以送给每一位喜欢java的小伙伴,想要获取的可以关注我的头条号并在后台私信我:交流,即可免费获取。
猜你喜欢
- 2024-10-11 SpringBoot整合Nacos配置中心加载原理二
- 2024-10-11 Java核心修饰符——abstract修饰符与抽象类、抽象方法
- 2024-10-11 绝对的JAVA面试干货(java juc 面试)
- 2024-10-11 Java面试集合(三)-1(基础篇java集合面试专用)
- 2024-10-11 Java之路-10 API、Scanner类、Random类、Math类
- 2024-10-11 JAVA面试基础知识点(java面试必背)
- 2024-10-11 java面试题及答案2022,java2022最新面试题及答案
- 2024-10-11 java向上转型和向下转型(java向上转型调用的是子类还是父类属性)
- 2024-10-11 「Java基础11」常用API(java基础知识点整理汇总)
- 2024-10-11 java基础总结(java基础总结心得)
欢迎 你 发表评论:
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)

本文暂时没有评论,来添加一个吧(●'◡'●)