专业的JAVA编程教程与资源

网站首页 > java教程 正文

java向上转型和向下转型(干货)(java向上转型和向下转型的区别)

temp10 2024-10-11 18:21:01 java教程 18 ℃ 0 评论

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

1.知识速记

java向上转型和向下转型(干货)(java向上转型和向下转型的区别)

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的小伙伴,想要获取的可以关注我的头条号并在后台私信我:交流,即可免费获取。


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

欢迎 发表评论:

最近发表
标签列表