(2),,,错误的向下转型
Animal a = new Animal(); 假设父类可以创建对象的
Cat c = (Cat)a;
这样不行,,因为你不能强制将一个动物转成猫,动物是先出现的,猫是后出现的,你把一个动物转成猫,那么动物这对象里面他不具备猫特有的方法,所以这个猫 c 是不可能调用抓老鼠的方法的,,a里面没有猫特有的方法,,你不能把以前有的东西强转换为现在的东西,,比如我要一只猫,,你给我猫是对的,但是你给我一动物,,那动物不确定是啥,他有可能是猪,,,
不能强制把 a 变成 Cat ,,,那个时候有可能还没有子类,怎么把父类变成子类呢,你就是真的有子类了,但是父类没有子类特有的功能
(3),多态中需要注意:
(a)
成员函数在多态调用时,编译看左边,运行看右边。
看代码
Fu f = new Zi(); f这个引用绑定在了ew Zi对象上
f.method1();
f.method2();
f.method3();
new Zi(); 这个对象建立的时候,堆内存里面一产生完以后,这个对象有2个变量,一个是父类的num一个是子类的num,,,你在拿父类的引用去找这num的时候,他会先找父类的num.他有自己的num,所以找自己的了,,当父类子类出现同名变量的时候,多态Fu f = new Zi()情况下看左边的Fu f
(c)
class Fu
{
static int num = 5;
void method1()
{
System.out.println("fu method_1");
}
void method2()
{
System.out.println("fu method_2");
}
static void method4()
{
System.out.println("fu method_4");
}
}
class Zi extends Fu
{
static int num = 8;
void method1()
{
System.out.println("zi method_1");
}
void method3()
{
System.out.println("zi method_3");
}