关于Java类型的转换,就是因为Java的三大特性之一的多态造成的,正是因为多态让我们在写程序时,少些了很多代码,并且实现了很大的扩展性,比如在方法中的形参中我们定义为父类引用,但实际传入的实参是子类对象,那么这个父类下的所有子类都可以传入并且在方法中调用,实际上程序运行时是运行的子类,这就是官方所说的父类引用指向了子类对象;
所有的事物有利必有弊,如果你在方法中调用的了子类独有的方法,也就是说,不是从父类继承的方法,那么编译器就会报异常,其实编译器有时候非常聪明,但有时候又傻的可爱,为什么呢?举一个大家都知道的例子,Animal是Pig的父类,如果你在main方法里写Animal animal = new Pig();你调用Pig不是从Animal类里继承的方法,那么你就会看到红色波浪线了,编译器在这里,他只知道这里声明了一个Aniaml,虽然你实际上是Pig,编译器就是这样死板;这里有两条方法解决这个问题
A:把animal进行类型转换,强转为Pig,在调用其方法,
B:用instanceof关键字if(animal instanceof pig){
则在这里面调用Pig的方法
}