引用与对象
ADHero h = new ADHero();
h 是一个引用,它指向一个 ADHero 对象,他们的关系就类似于遥控器和具体的电视(可见 面向过程部分 章节中关于函数值传递的讲解)。
子类与父类的转换
子类转父类
汽车是车,白马是马,手机是电子设备……从特殊到一般,我们可以使用他们的特殊功能,但是我们同样可以使用他们的共性部分(因为子类本身已经包含了父类的所有属性和方法)
public class Main {
public static void main(String[] args) {
Hero h = new Hero();
ADHero ad = new ADHero();
//类型转换指的是把一个引用所指向的对象的类型,转换为另一个引用的类型
h = ad;
}
}
判断 A 能不能转成 B 很简单,只要问:A 是不是 B?是,那就可以转。
父类转子类
看情况,如果指向的这个子类刚好就是你想要转换的类型,就可以转换成功,否则会抛出 ClassCastException 异常。
public class Main {
public static void main(String[] args) {
Hero h =new Hero();
ADHero ad = new ADHero();
Support s =new Support();
h = ad;
ad = (ADHero) h;//成功,因为h指向的对象就是ADHero
h = s;
ad = (ADHero) h;//失败,因为h指向的对象是Support
}
}
接口和实现类的转换
不同关系类的转换
运算符 instanceof
public class Hero {
public static void main(String[] args) {
ADHero ad = new ADHero();
APHero ap = new APHero();
Hero h1= ad;
Hero h2= ap;
//判断引用h1指向的对象,是否是ADHero类型
System.out.println(h1 instanceof ADHero);
//判断引用h2指向的对象,是否是APHero类型
System.out.println(h2 instanceof APHero);
//判断引用h1指向的对象,是否是Hero的子类型
System.out.println(h1 instanceof Hero);
}
}
语法为 A instanceof B 形式,值的类型为 boolean ,用于判断引用 A 指向的对象是不是 B 或者 B的子类型(子类或者实现类)。