instanceof关键字实例和类型转换

instanceof实例

package b;

/**
 * @version 1.8
 * @since 1.0
 * @author we'er
 */
public class Test {

    public static void main(String[] args) {

        // 父子关系
        // Object->String
        // Object->Person->Teacher
        // Object->Person->Student
        Object object = new Student();

       // System.out.println(X instanceof Y); 判断能不能编译通过,跟最终结果无关
        // instance 关键字作用判断左边的引用对象是否是右边的子类型
        // 使用instanceof是要先判断是否在同一分支下,否则判断无意义
        // instanceof 用于强制类型转换是判断转换对象同比较类是否属于父子关系
        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 Teacher错误原因:在 Object->Person->Student分支外
        System.out.println(object instanceof String); // false
        System.out.println("----------------------------------------");


        Person person = 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); // false Teacher错误原因:在 Object->Person->Student分支外
       // System.out.println(person instanceof String); // 编译时报错 原因:Person和String想当于同级,无法比较
        System.out.println("----------------------------------------");


        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 String); // 编译时报错:不在同一分支,比较无意义
    }
}

代码测试结果

父类无参方法调用
true
true
true
false
false
----------------------------------------
父类无参方法调用
true
true
true
false
----------------------------------------
父类无参方法调用
true
true
true

类型转换

类型之间转换实质上是父子关系的转换

1. 把父类的引用指向子类的对象
Person person = new Student(); person父类引用指向Student类对象
2. 把子类转换为父类,向上转型。可能会丢失方法
3. 把父类转换为子类,向下转型。(强制转换)
4. 作用:方便方法的调用,减少代码的冗余
public class Test {

    public static void main(String[] args) {

        Student student = new Student();
        student.run();

        // 子类转父类,可能会丢失自己本来的一些方法
         Person person = student;
        // person.run(); 报红,无法使用子类run方法

     }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值