关于java的instanceof类型转换

这篇具有很好参考价值的文章主要介绍了关于java的instanceof类型转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于java的instanceof类型转换

我们在上一篇文章中了解到了java比较重要的特性多态,本篇文章,承接上一篇文章中的伏笔,一起来了解一下instanceof类型转换,引用类型之间的转换😀。

一、instanceof

  • 判断一个对象是什么类型。
  • 判断两个类之间是否存在父子关系。

1、我们先创建三个类,人类,老师类,学生类,并在人类中写出一个run方法。

package oop.Demo08;
//Person
public class Person
{
    public void run()
    {
        System.out.println("run");
    }
}
package oop.Demo08;
//Student
public class Student extends Person
{
    
}
package oop.Demo08;
//Teacher
public class Teacher extends Person
{
    
}

2、我们用main方法,来使用一下instanceof。

import oop.Demo08.Student;
import oop.Demo08.Teacher;

public class Application {
    public static void main(String[] args)
    {
        //Object > String
        //Object > Person > Teacher
        //Object > Person > Student
        Object object = new Student();

        System.out.println(object instanceof Object);
        System.out.println(object instanceof Person);
        System.out.println(object instanceof Student);
        System.out.println(object instanceof Teacher);
        System.out.println(object instanceof String);//因为Object和String有联系
    }
}

我们执行以下代码,会看到以下的结果。

true
true
true
false
false

因为instanceof是判断是否存在父子类关系,我们的Teacher,和学生类是平级,所以不存在关系,String类型是引用类型,也不能作为关系的对比,就像猫不等于狗。

import oop.Demo08.Student;
import oop.Demo08.Teacher;

public class Application {
    public static void main(String[] args)
    {
        //Object > String
        //Object > Person > Teacher
        //Object > Person > Student
        Person person = new Student();

        System.out.println(person instanceof Object);
        System.out.println(person instanceof Person);
        System.out.println(person instanceof Student);
        System.out.println(person instanceof Teacher);
        //System.out.println(person instanceof String);//没有关联,编译器会报错
    }
}
true
true
true
false

我们再来看一个Student对象。

import oop.Demo08.Student;
import oop.Demo08.Teacher;

public class Application {
    public static void main(String[] args)
    {
        //Object > String
        //Object > Person > Teacher
        //Object > Person > Student
        Student student = new Student();

        System.out.println(student instanceof Object);
        System.out.println(student instanceof Person);
        System.out.println(student instanceof Student);
        //System.out.println(student instanceof Teacher);//没有关联,编译器会报错
        //System.out.println(person instanceof String);//没有关联,编译器会报错
    }
}
true
true
true
  • 公式:X instanceof Y
  • 编译是否可以通过,取决于X和Y有没有关联,有没有父子关系😎。

二、类型转换

我们在Student类中,写一个go方法,现在的Student类中有自己的go方法和父类的run方法。

package oop.Demo08;

public class Student extends Person
{
    public void go()
    {
        System.out.println("go");
    }
}

我们之前了解过,基本类型转换,由高转低,需要强转,但是低转高,不需要强转。

关于java的基本类型转换

  • 类型之间的转化:父子转换

  • 父比子高,所以不需要强制转换。

public class Application {
    public static void main(String[] args)
    {
        Person person = new Student();//Person类型
    }
}

但是我们想使用学生类中的go方法,由于学生类是低类型,Person是高类型,所以需要强制转换。

public class Application {
    public static void main(String[] args)
    {
        Person person = new Student();//Person类型
        ((Student) person).go();
    }
}

也可以用下面的方法,清晰一些。文章来源地址https://www.toymoban.com/news/detail-819766.html

public class Application {
    public static void main(String[] args)
    {
        Person person = new Student();
        Student student=(Student) person;
        student.go();
    }
}
  • 由低转高,不需要强转。
public class Application {
    public static void main(String[] args)
    {
        Student student = new Student();
        Person person=student;
    }
}
  • 子类转换为父类,可能丢失自己原本的方法。

三、总结

  • 父类的引用指向子类的对象。
  • 子类转换为父类,向上转型不用强制转换。
  • 想把父类转换为子类,向下转型,需要强制转换,可能会丢失方法。
  • 转换方便方法调用,不用重新new一个类,通过降级等使用类中的方法,减少重复的代码,有效提供利用率。
  • 抽象:封装,继承,多态。
  • 抽象类:比抽象还要抽象的🥲(我们放在后续的文章中详细说明)。
  • 接口:比抽象类还要抽象的🥲(我们放在后续的文章中详细说明)。
  • 编程的思想其实就是围绕抽象,所以我们要做到持续的学习,现在学习以后可能不会理解的很透彻,但是不断积累,不断实践,多多对自己的想法进行一个验证,有一天可能遇到一个问题,解决了,突然茅塞顿开。

到了这里,关于关于java的instanceof类型转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于Redis-存Long取Integer类型转换错误的问题

    背景 最近遇到了两个Redis相关的问题,趁着清明假期,梳理整理。 1.存入Long类型对象,在代码中使用Long类型接收,结果报类型转换错误。 2.String对象的反序列化问题,直接在Redis服务器上新增一个key-value,而后在代码中get(key)时,报反序列化失败。 关于Long类型转换错误 Red

    2024年02月15日
    浏览(31)
  • js常用判断数据类型方法以及优缺点 以及 instanceof 原理实现

    使用typeof操作符可以 判断一个值的数据类型 。它返回一个表示数据类型的字符串。 优点:typeof 操作符是一种简单、快速的方式来 判断基本数据类型 。它返回的结果是一个字符串,可以直接用于条件判断。 缺点: 对于引用类型(除了函数)的判断结果都是\\\'object\\\' ,无法细

    2024年02月12日
    浏览(43)
  • C语言强制类型转换

    C语言中的强制类型转换是指将一种数据类型转换为另一种数据类型的过程。强制类型转换可以显式地将一个数值从一种数据类型转换为另一种数据类型,但是需要注意的是,该转换可能会导致数据精度的丢失。下面是C语言中强制类型转换的实际代码示例: 在上述代码示例中

    2024年02月04日
    浏览(44)
  • C语言(强制类型转换)

    创作内容不易,学习的朋友麻烦关注下博主,后面学习不迷路。有不会的问题也可以论坛咨询博主,博主也会及时回复~~ 一.类型转换原则 1.升级:当类型转换出现在表达式时,无论时unsigned还是signed的char和short都会被自动转换成int,如有必要会被转换成unsigned int(如果short与

    2024年02月16日
    浏览(39)
  • C语言——类型转换

    数据有不同的类型,不同类型数据之间进行混合运算时涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则,由编译系统自动完成 强制类型转换:把表达式的运算结果强制转换成所需的数据类型 语法格式: (类型)变量或常量 类型转换的原则:

    2024年02月11日
    浏览(37)
  • 【C语言笔记】C语言数据类型转换

    C语言中有很多数据类型,这些数据类型在内存中的存储形式不一样,为了计算方便,编译器不得不将某一种数据类型转换成另一种数据类型。本篇将介绍C语言中各种数据类型转换的规则。 自动类型转换指的是编译器在编译时自动的、隐式的进行的类型转换。 将一种类型的数

    2024年02月02日
    浏览(90)
  • C语言——函数指针类型转换

    昨天为了避免跨层调用API搞了个回调函数,用了函数指针,因为参数类型的问题总是编译报错,今天就看了两篇博文学习学习,顺便做做笔记。 其实正常来讲只要把函数指针的参数个数、类型和返回值这些函数指针的标签或者说是属性写对了的话就不会有社么问题,但我也不

    2024年01月16日
    浏览(35)
  • stm32H743编译器关于浮点类型强制转换传参的bug

    局部函数,正常传参 当测试函数作为局部函数和main函数写在同一个文件中时,参数可以正常传递。函数参数和形参都为3.14 keil仿真截图,形参正常 全局函数,异常传参 当测试函数放到另一个文件中,在main函数中进行调用时,会发生异常参数,函数形参转换出错 test.c main.

    2024年02月03日
    浏览(42)
  • 『C语言』隐式类型转换规则

    🔥 博客主页 : 小羊失眠啦. 🔖 系列专栏 : C语言 🌥️ 每日语录 : 但行前路,不负韶华! ❤️ 感谢大家点赞👍收藏⭐评论✍️ 今天小羊又来给铁汁们分享关于C语言的 隐式类型转换规则 ,在C语言中类型转换方式可分为 隐式类型转换 和 显式类型转换 (强制类型转换),

    2024年02月12日
    浏览(35)
  • C语言编程—强制类型转换

    强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用 强制类型转换运算符 来把值显式地从一种类型转换为另一种类型,如下所示: 请看下面的实例,使用

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包