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

instanceof

instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

创建一个 Person 类,定义 run() 方法

public class Person {
    public void run() {
        System.out.println("run");
    }
}

再定义两个类继承 Person 类

public class Student extends Person {}
public class Teacher extends Person {}

启动类 Application

public class Application {
    public static void main(String[] args) {
        // 所有类都默认继承 Object 类
        // Object > Person > Student
        // Object > Person > Teacher
        // Object > String
        Object object = new Student();
        
        System.out.println(object instanceof Student); // true
        System.out.println(object instanceof Person);  // true
        System.out.println(object instanceof Object);  // true
        System.out.println(object instanceof Teacher); // false
        System.out.println(object instanceof String);  // false

        Person person = new Person();
        System.out.println(person instanceof Student); // true
        System.out.println(person instanceof Person);  // true
        System.out.println(person instanceof Object);  // true
        System.out.println(person instanceof Teacher); // false
        // System.out.println(person instanceof String);  // 编译报错
        // Person 和 String 毫无关系,所以不能用于比较,才会编译就报错

        Student student = new Student();
       
        System.out.println(person instanceof Student); // true
        System.out.println(person instanceof Person);  // true
        System.out.println(person instanceof Object);  // true
        // System.out.println(person instanceof Teacher); // 编译报错
        // System.out.println(person instanceof String);  // 编译报错
        
    }
}

类型转换

创建一个 Person 类,定义 run() 方法

public class Person {
    public void run() {
        System.out.println("run");
    }
}

创建一个 Student 类继承 Person 类,并定义一个 go 方法

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

启动类 Application

public class Application {
    public static void main(String[] args) {
        // 类型之间的转换
        // 高                   低
        Person person = new Student();
        // 将 person 对象转换成 Student 类型,才可以使用 Student 里面的方法
        Student student = (Student) person;
        student.go();
        // 上面两句可简写成:((Student) obj).go();
        
        // 子类转换成父类,可能丢失自己本来的一些方法!
        Student student = new Student();
        student.go();
        Person person = student;
        // 这时的 student 调用 go() 方法需要先转化成 Student 类型才可以
    }
}

总结

1、父类引用指向子类的对象;

2、把子类转换成父类,向上转型;

3、把父类转换成子类,向下转型;(强制转换)

4、方便方法的调用,减少重复的代码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值