什么是多态及多态的应用了解
多态可以分为向上转型和向下转型,程序分为编译器和运行期。两则呈现不同的状态,称为多态。例如人、中国人、朝鲜人三个类。
public class Person {
public void say(){
System.out.println("人说话!");
}
}
public class Chinese extends Person {
@Override
public void say() {
System.out.println("说中国话!");
}
public void cloth(){
System.out.println("穿汉服!");
}
}
/*
1、多态必须是具备继承关系。
2、多态分为向上转型和向下转型
向上转型:是jvm自动转载
向下转型:必须要强制类型转换
3、当需要访问子类中父类不具有的方法时才需要进行强制类型转换
4、当编译器在编译的时候,只会读取Person.class文件,如果person.class中不具备的cloth方法就会报错,这个时候就需要进行强制类型转换
*/
Person p = new Chinese();//(向上类型装换)jvm虚拟机的堆内存中会存放Chinese.class文件,p指向该文件,编译器直脑筋,只会指向Person.class
p.say();//输出说中国话!运行期的p指向Chinese对象
Chinese chinese = (Chinese) p;//强制类型转换(向下类型转换)
chinese.cloth();
/*
向上类型转换只要编译的时候不出问题就不会报错,但是向下类型有时候会抛出异常java.lang.ClassCastException因为虽然在编译器会认为p是person字节码文件,但是在运行过程p是指向Chinese字节码的,Chniese和Chaoxian之间没有继承关系,就会报错。
1、在进行类型强制转换时应用 实例 instanceof 类型进行判断。
*/
//Chaoxian chaoxian = (Chaoxian) p;
if (p instanceof Chinese){
Chinese chinese = (Chinese) p;
chinese.cloth();
}else if (p instanceof Chaoxian){
Chaoxian chaoxian = (Chaoxian) p;
chaoxian.cloth();
}