我是靠谱客的博主 贤惠水杯,最近开发中收集的这篇文章主要介绍Java 面向对象:instanceof和类型转换的理解Java 面向对象:instanceof和类型转换的理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java 面向对象:instanceof和类型转换的理解

一、instanceof

1.定义:

instanceof A 判断一个引用所指向的对象,是否是A类型,或者A的子类

instanceof 的格式:
变量名 instanceof 数据类型,能不能编译通过是取决于,变量"指向的类型""数据类型"是否存在父子关系,如果存在父子关系则编译通过

换言之:X instanceof Y ,变量X指向的类型如果是Y的子类型则编译通过

instanceof 的使用
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。

所以,转换前,我们最好使用instanceof 先做一个判断

2. 实例

Person类(父类)

package Day0204.Demo03;

public class Person {

}

Student类(子类)继承Person类

package Day0204.Demo03;

public class Student extends Person{
}

Teacher类(子类)继承Person类

package Day0204.Demo03;

public class Teacher extends Person{
}

测试类

package Day0204.Demo03;
public class Test {
    public static void main(String[] args) {
        //Object > Person > Teacher
        //Object > String
        //Object > Person > Student
        Object o = new Student();
        System.out.println(o instanceof Student);//true
        System.out.println(o instanceof Person);//true
        System.out.println(o instanceof Teacher);//false
        System.out.println(o instanceof String);//false

        System.out.println("======================");
        //Person > Teacher
        //String
        //Person > Student
        Person p = new Student();
        System.out.println(p instanceof Student);//true
        System.out.println(p instanceof Person);//true
        System.out.println(p instanceof Teacher);//false
//        System.out.println(p instanceof String);//编译不通过
        System.out.println("======================");

        Student s = new Student();
        System.out.println(s instanceof Student);//true
        System.out.println(s instanceof Person);//true
//        System.out.println(s instanceof Teacher);//编译不通过
//        System.out.println(p instanceof String);//编译不通过

    }
}

类之间的继承关系:
Object > Person > Teacher
Object > String
Object > Person > Student

变量o指向的是Student类型,
Student类是Person类和Object类的子类,与String类、Teacher类无关
所以前两个输出结果为true,而后两个为false


        Object o = new Student();
        System.out.println(o instanceof Student);//true
        System.out.println(o instanceof Person);//true
        System.out.println(o instanceof Teacher);//false
        System.out.println(o instanceof String);//false

以此类推

二、类型转换

1. 向上转型

向上转型:多态本身是子类类型向父类类型向上转换的过程,其中,这个过程是默认的。你可以把这个过程理解为基本类型的小类型转大类型自动转换,不需要强制转换。

当父类引用指向一个子类对象时,便是向上转型。

向上转型格式:

父类类型 变量名 = new 子类类型(); 如:Father f= new Son();

2.向下转型

向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。同样可以把这个过程理解为基本类型的自动转换,大类型转小类型需要强制转换。一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,向下转使用格式:

Father father = new Son();
子类类型 变量名 = (子类类型) 父类变量名; 如:Son s =(Son) father;

划重点:向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型)

  • 向下转型的意义:
    想要调用子类特有的方法,必须做向下转型。

参考宜春的“深入理解java多态没有烤山药的存在,java就不香了吗?”

以及【狂神说Java】Java零基础学习视频通俗易懂

最后

以上就是贤惠水杯为你收集整理的Java 面向对象:instanceof和类型转换的理解Java 面向对象:instanceof和类型转换的理解的全部内容,希望文章能够帮你解决Java 面向对象:instanceof和类型转换的理解Java 面向对象:instanceof和类型转换的理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部