黑马程序员技术交流社区

标题: 有关多态问题,请求各位大神给予指点 [打印本页]

作者: 姬运涛    时间: 2014-1-19 18:02
标题: 有关多态问题,请求各位大神给予指点
本帖最后由 姬运涛 于 2014-1-20 19:43 编辑

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();
        

        }







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2