Loading

Java instanceof和类型转换

数据类型转换
1.基本数据类型转换:

byte,short,char<int <long<float<double

由低到高自动转换byte--->double 自动

由高到低强制转换double--->byte 强制

2.引用数据类型

子类<父类(父类引用转向子类对象)

student<person<object

由低到高,自动转换student---->object 自动(向上转型)

由高到低,强制转换object---->student 强制(向下转型)

子类转父类,自动动转换,但会丢失子类的方法。(强制转换)

新增子类
public class Demo15 {
    public static void main(String[] args) {
        //一个对象的实际类型是确定的
        //但其可以指向的引用类型是不确定的
        Demo17 s1 = new Demo17();//能调用的都是子类或继承父类的方法
        Demo16 s2 = new Demo17();//父类的引用指向子类(能调用用的都是自己的)

        //对象能执行哪些方法要看=左边,方法怎么用看右边;
        s2.run();
        s1.test();
        //s2.test();//报错因为Demo16 s2=new Demo17()中DEMO16中没有test方法
        Object object = new Demo17();
        //Object>String
        //Object>Person>Teacher
        //Object>Person>Student

        //instanceof要求左右两边对比的类要有包含关系
        System.out.println(object instanceof Demo17);
        System.out.println(object instanceof Demo16);
        System.out.println(object instanceof Object);
        System.out.println(object instanceof Demo18);
        System.out.println(object instanceof String);
        System.out.println("========================");
        Demo16 person=new Demo17();
        System.out.println(person instanceof Demo17);
        System.out.println(person instanceof Demo16);
        System.out.println(person instanceof Object);
        System.out.println(person instanceof Demo18);
        //System.out.println(person instanceof String);//编译报错
        System.out.println("========================");
        Demo17 student=new Demo17();
        System.out.println(student instanceof Demo17);
        System.out.println(student instanceof Demo16);
        System.out.println(student instanceof Object);
        //System.out.println(student instanceof Demo18);//编译报错
        //System.out.println(student instanceof String);//编译报错
        System.out.println("========================");

        //父类转子类(高转低需要强制转换)
        //高(父)       低(子)
        Demo16 obj=new Demo17();
        //将obj对象转化为Demo17类型,我们即可使用Demo17的独有方法
        Demo17 st = (Demo17) obj;
        st.test();
        //((Demo17)obj).test();另一种写法
    }
}

其余代码参考Java多态文章中...

public class Demo15 {
    public static void main(String[] args) {
        //一个对象的实际类型是确定的
        //但其可以指向的引用类型是不确定的
        Demo17 s1 = new Demo17();//能调用的都是子类或继承父类的方法
        Demo16 s2 = new Demo17();//父类的引用指向子类(能调用用的都是自己的)

        //对象能执行哪些方法要看=左边,方法怎么用看右边;
        s2.run();
        s1.test();
        //s2.test();//报错因为Demo16 s2=new Demo17()中DEMO16中没有test方法
        Object object = new Demo17();
        //Object>String
        //Object>Person>Teacher
        //Object>Person>Student

        //instanceof要求左右两边对比的类要有包含关系
        System.out.println(object instanceof Demo17);
        System.out.println(object instanceof Demo16);
        System.out.println(object instanceof Object);
        System.out.println(object instanceof Demo18);
        System.out.println(object instanceof String);
        System.out.println("========================");
        Demo16 person=new Demo17();
        System.out.println(person instanceof Demo17);
        System.out.println(person instanceof Demo16);
        System.out.println(person instanceof Object);
        System.out.println(person instanceof Demo18);
        //System.out.println(person instanceof String);//编译报错
        System.out.println("========================");
        Demo17 student=new Demo17();
        System.out.println(student instanceof Demo17);
        System.out.println(student instanceof Demo16);
        System.out.println(student instanceof Object);
        //System.out.println(student instanceof Demo18);//编译报错
        //System.out.println(student instanceof String);//编译报错
        System.out.println("========================");

        //父类转子类(高转低需要强制转换)
        //高(父)       低(子)
        Demo16 obj=new Demo17();
        //将obj对象转化为Demo17类型,我们即可使用Demo17的独有方法
        Demo17 st = (Demo17) obj;
        st.test();
        //((Demo17)obj).test();另一种写法
    }
}
posted @ 2022-01-21 18:07  Cn_FallTime  阅读(78)  评论(0编辑  收藏  举报