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();另一种写法
}
}
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();另一种写法
}
}
本文来自博客园,作者:Cn_FallTime,转载请注明原文链接:https://www.cnblogs.com/CnFallTime/p/15831310.html