java中的多态中的语法转换:
只有在是继承关系的前提下才可以进行转型
子---->父 ,向上转型(自动转型)
父---->子 ,向下转型(强制转换)
以下为例子:
public class duotai {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Animal a2=new Cat();//向上转型,
//在编译阶段只检查语法,认为a2是animal类型,当运行时,在堆内存创建birds类型赋值给a2
a2.move();//猫在走路
Cat y=(Cat)a2;//向下转型
//目前的a2已经是animal了,将他强制转变为cat并用一个cat类型接收
//向下转型是当需要子类类独有的方法是进行转型
y.cat();//猫猫捉老鼠!!
Animal a3=new birds();
//强制转换异常
//Cat x=(Cat)a3;//将一个内部是birds的类转换为cat,会异常,编译不会报错,因为在表面上看
//来a3是animal类形
//x.cat();
System.out.println(a3 instanceof Cat);//结果为false,不执行
//向下转型 以后都要判断
if(a3 instanceof Cat){//instanceof运算符,判断是否可以转换
//如果a6是cat,可以进行强制转换
Cat x=(Cat)a3;
x.cat();
}
}
}
//动物类,父类
class Animal{
public void move(){
System.out.println("动物在移动");
}
}
//鸟类,子类
class birds extends Animal{
public void move(){
System.out.println("鸟在飞");
}
}
//猫类,子类
class Cat extends Animal{
public void move(){
System.out.println("猫在走路");
}
public void cat(){
System.out.println("猫猫捉老鼠!!!");
}
}
当子类中的方法是独有的时,这时可以选择进行向下转型
instanceof运算符判断的应用:
public class duotai {
public static void main(String[] args) {
Animal q=new birds();
Animal w=new Cat();
if(q instanceof birds){
birds z=(birds)q;
z.sing();
}else if(q instanceof Cat){
Cat e=(Cat)q;
e.cat();
}
if(w instanceof birds){
birds a=(birds)w;
a.sing();
}else if(w instanceof Cat){
Cat f=(Cat)w;
f.cat();
}
}
}
//动物类,父类
class Animal{
public void move(){
System.out.println("动物在移动");
}
}
//鸟类,子类
class birds extends Animal{
public void move(){
System.out.println("鸟在飞");
}
public void sing(){
System.out.println("鸟在歌唱");
}
}
//猫类,子类
class Cat extends Animal{
public void move(){
System.out.println("猫在走路");
}
public void cat(){
System.out.println("猫猫捉老鼠!!!");
}
}