class Fu
{
void method1()
{
System.out.println("fu method_1");
}
void method2()
{
System.out.println("fu method_2");
}
}
class Zi extends Fu
{
void method1()
{
System.out.println("zi method_1");
}
void method3()
{
System.out.println("zi method_3");
}
}
public class Test
{
public static void main(String[] args)
{
Fu f =new Zi();
f.method1();
f.method2();
f.method3();
}
}
为什么编译时提示找不到method3();不是zi类中有method3(),这是为什么?请各位大神指点作者: 淡夜清风 时间: 2014-1-19 18:07
Fu f =new Zi();
父类引用指向子类对象
因为父类引用f不能访问子类特有的方法(method3())。
想访问method3()的话,必须做强转。
Zi z = (Zi)f;
z.method3();作者: 花生壳 时间: 2014-1-19 18:19
因为你new了子类的对象用父接受,然后new的fu 对象f 只能调用子类中和父类同名的方法,和父类中的方法,对于子类中自己定义的方法,不能调用!作者: 乐宝myhoney 时间: 2014-1-19 18:22
因为method3()是子类特有的方法,父类的引用f是不能调用子类特有方法的,如果要调用,必须将父类的引用强转为子类的引用。作者: wodenhaowzg 时间: 2014-1-19 18:22
因为父类中没有method3()方法,子类有。
多态:父类引用指向子类对象,但不能调用子类特有的方法作者: 宋星 时间: 2014-1-19 18:24
说通俗一点,这个父类的引用,他现在还是伪装成是父类(老毕和老毕父亲的故事),所以只能调用父类中有的方法,但想调用子类中的方法(要把伪装的外套脱掉,变成儿子),要强转为子类,只有变成子类后,才可以调用子类特有的方法。
main函数中的代码:
public static void main(String[] args)
{
Fu f =new Zi();
f.method1();
f.method2();
Zi zi=(Zi) f;
zi.method3();