拆箱
就是父类的引用转化为子类的引用。也就是父类的对象名转为子类的对象名,我不确定这个过程会不会开辟空间。
这个过程有可能出现问题,因为子类可能有自己的方法或属性,父类没有,那么就可能出现类型转化异常。
装箱
子类对象转化为父类的对象,这个过程绝对安全,因为子类继承父类,那么就有父类的属性和方法。
instanceof
obj instanceof class
obj为某个类的对象。
class为类名。
结果返回为一个boolean值,如果时该类的对象为true,否者就是false.
通常instanceof使用在向下转型即拆箱的过程中。这个和多态联系的比较紧密。
有个学生类;有个好学生类继承学生类,并且实现俩个接口。
学生类
public class Student {
private String name ;
private int age ;
public void learn() {
System.out.println("我在学习。。。");
}
}
好学生类
public class BestStudent extends Student implements Music,Sport{
public void sing() {
System.out.println("三好学生在唱歌");
}
public void flute() {//吹笛子
System.out.println("三好学生在吹笛子");
}
public void playBaskball() {
System.out.println("三好学生在打篮球");
}
public void run() {
System.out.println("三好学生在跑步");
}
}
接口
public interface Sport {
void playBaskball();
void run();
}
public interface Music {
void sing();
void flute();//吹笛子
}
main方法
public class Demo {
public static void main(String[] args) {
Student student = new BestStudent(); //多态
student.learn(); //调用父类里面的方法
BestStudent goodStudent = (BestStudent)student; //向下拆箱 , 子类名 对象名 = (子类名)父类对象名
if( student instanceof BestStudent) { //判断对象的类型,然后调用子类的方法
goodStudent.playBaskball();
goodStudent.run();
goodStudent.flute();
goodStudent.sing();
}
}
}