A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姬运涛 中级黑马   /  2014-1-19 18:02  /  1109 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 姬运涛 于 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(),这是为什么?请各位大神指点

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

5 个回复

倒序浏览
Fu f =new Zi();
父类引用指向子类对象
因为父类引用f不能访问子类特有的方法(method3())。
想访问method3()的话,必须做强转。
Zi z = (Zi)f;
z.method3();

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

回复 使用道具 举报
因为你new了子类的对象用父接受,然后new的fu 对象f 只能调用子类中和父类同名的方法,和父类中的方法,对于子类中自己定义的方法,不能调用!
回复 使用道具 举报
因为method3()是子类特有的方法,父类的引用f是不能调用子类特有方法的,如果要调用,必须将父类的引用强转为子类的引用。
回复 使用道具 举报
因为父类中没有method3()方法,子类有。
多态:父类引用指向子类对象,但不能调用子类特有的方法
回复 使用道具 举报
说通俗一点,这个父类的引用,他现在还是伪装成是父类(老毕和老毕父亲的故事),所以只能调用父类中有的方法,但想调用子类中的方法(要把伪装的外套脱掉,变成儿子),要强转为子类,只有变成子类后,才可以调用子类特有的方法。
main函数中的代码:
public static void main(String[] args)
        {
                Fu f =new Zi();
                f.method1();
                f.method2();
                Zi zi=(Zi) f;
                zi.method3();
        

        }


评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马