多态的强制转换
多态的强制转换的好处:如果我们用了多态,但是子类特有的属性和方法父类的指针是没有用的,因为父类和子类的类型不一样,所以这时候就需要强制转换,就跟八大基本类型的转换差不多,就像把一个int类型的数字转换成double类型的数字一样,大类型转换成小类型需要强制转换,小类型转换成大类型不需要转换,
同理可得,父类像子类转换需要强制转换,子类转换成父类则是自动转换
多态的强制转换可以分为向上强转型和向下转型
用例子来说明这个问题:
class A4 extends paper
{
void wirte()
{
System.out.println("用A4纸张写字");
}
void test()
{
System.out.println("test");
}
}
class A5 extends paper
{
void wirte()
{
System.out.println("用A5纸张写字");
}
}
class Test
{
public static void main(String[] args)
{
//向上转型
paper p=new A4();
/*
向上强制转换时不用强制,是因为父类的东西子类都有,所以编译器去子类中找这个方法时是能找到的,所以不会报错
*/
p.wirte();
//向下转型
A4 a=(A4)p;
/*因为p是父类的指针,所以如果想调用子类特有的属性时,编译器会报错,因为父类中没有子类特有的属性,编译器去父类中找不到这个方法就会报错,所以要在父类的p的这个对象前面加一个子类的类名A4,让编译器去子类中寻找这个方法.*/
a.test();
paper b=new A5();
b.wirte();
}
}
abstract class paper
{
abstract void wirte();
}