多态 instanceof和类型转换

多态 instanceof和类型转换

instanceof测试

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

        //System.out.println(X instanceof Y);
        //能否编译通过看X与Y是否存在父子关系;
        //是true或者flase看变量X是否为Y的父子类型
        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);//flase
        System.out.println(object instanceof String);//flase
        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);//flase
        //System.out.println(person instanceof String);编译错误
        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);编译错误
     }
    }

类型转换总结

1.父类引用指向子类的对象才可以类型转换

2.子类转化为父类,向上转型,自动转型

3.父类转化为子类,向下转型,强制转型

向上转型和向下转型的区别

向上转型:通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换

失去了子类新增的方法,只能调用父类里面已经有的方法

向下转型:通过父类对象(大范围)实例化子类对象(小范围) .这种属于强制转换

在Java中.向下转型则是为了.通过父类强制转换为子类.从而来调用子类独有的方法,为了保证向下转型的顺利完成。在Java中提供了一个关键字instanceof ,通过instanceof可以判断某对象是否是某类的实例,如果是则返回true, 否则为false

转换测试

public class Application {
    public static void main(String[] args) {
       //类型转换:父  子
        // 高    低
        Person p1 = new Student();
        //把这个对象强制转化为Student类型,既可以使用Student类型方法
        //子类转化为父类,可能会丢失子类自己的方法,去执行父类的方法
        ((Student)p1).test();
    }
    }

你可能感兴趣的:(java,开发语言)