Java面向对象08:instanceof 和类型转换

instanceof

  1. 什么是 instanceof

是 Java 的保留关键字。它的作用是测式一个对象是否为一个类(或接口、抽象类、父类)的实例返回 boolean 的数据类型

  1. instanceof的特点

左边是对象,右边是类;当左边对象是右边类或子类所创建对象时,返回true;否则,返回false

  1. instanceof用法实例
//父类
public class Person {
    }
//student子类
public class Student extends Person {
    }
//teacher子类
public class Teacher extends Person {
    }
//测试类
public class Test {
    public static void main(String[] args) {
    //Object > Person > Student
    //Object > Person > Teacher
    //Object > int
    Student student =new Student(); 
 System.out.println(student instanceof Student);//返回true
 System.out.println(student instanceof Person);//返回true
 System.out.println(student instanceof Object);//返回true
 System.out.println(student instanceof Teacher);//编译时就报错
 System.out.println(student instanceof int);//编译时就报错
 //===========================================================   
    Person  person =new Student(); 
System.out.println(person instanceof Student);//返回true,Studen类是person对象的指向
System.out.println(person instanceof Person);//返回true,Person类是person对象的实例
System.out.println(person instanceof Object);//返回true ,Object类是person对象指向类的父类      
System.out.println(person instanceof Teacher);//返回false
System.out.println(person instanceof int);//编译时就报错

//这么看下来就发现,instanceof只要是右边的类是左边对象的指向,实例,父类就会返回true,如果没有什么联系就会返回false
    }
}

类型转换

  1. 类型转换

低类型转换为高类型可以直接转换,而高类型转换为低类型需要进行强制转换,为了方便方法的调用,减少重复的代码

  1. 类型转换实例
  • 当我们使用父类的引用指向子类对象时( Person obj =new Student();),想用父类的对象去调用子类独有的方法时发现不能直接进行调用(obj.talk(),直接这样是不行的),我们需要将父类的对象强制转化为子类的对象(((Student)obj).talk();)才能去调用子类独有的方法
  • 当我们像将子类的对象转换为父类的对象时,再去调用子类的一些方法发现不能直接调用,所以说当子类转换为父类的时候可能会丢失一些自己的方法。
  • //把子类转换为父类 向上转型 //把父类转换为子类 向下转型

父类与子类类型之间进行转换

//父类
public class Person {
    public void say(){
    System.out.println("a");
  }
    }
//student子类
public class Student extends Person {

   //子类独有的方法
   public void talk(){
    System.out.println("b");
    }
//测试类
public class Test {
    public static void main(String[] args) {
        //高              //低
        //把子类转换为父类 向上转型
        
        Person obj =new Student();
        
        //我们不能直接使用obj去调用子类的talk方法,这是子类独有的
        //当时我们可以通过强制转换将person引用类型的obj强制转换为
        //低类型student的obj
       //把父类转换为子类 向下转型
      ((Student)obj).talk();

       Student student = new Student();
       student.talk();
       //将Student类的对象sthdent转换为Person类的对象person
       Person person = student;
       //我们发现不能用person.talk();去调用talk方法了
       //所以说当子类转换为父类的时候可能会丢失一些自己的方法。
     

  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值