黑马程序员技术交流社区

标题: 求大神帮忙分析下:两段代码为什么输出结果不一样 [打印本页]

作者: 13480153263    时间: 2015-11-10 20:17
标题: 求大神帮忙分析下:两段代码为什么输出结果不一样
代码一:
public static void main(String[] args) {
                Dog d = new Dog();
                d.eat();
        }
}
class Animal {
        public void eat(){
                System.out.println("动物吃饭");
        }
}
class Dog extends Animal{
        public void eat(){
                super.eat();
                System.out.println("狗吃肉");
        }
}
输出: 动物吃饭    狗吃肉

代码二:
        public static void main(String[] args) {
                Dog d = new Dog();
                d.eat();
        }
}
class Animal {
        public void eat(){
                System.out.println("动物吃东西");
        }
}
class Dog extends Animal {
        public void eat(Animal a){       
                a.eat();
                System.out.println("狗吃肉");
        }
}
输出 :   动物吃东西



作者: sshh11    时间: 2015-11-10 22:15

第二代码eat函数并没有覆盖,eat函数重载了
作者: Sayman    时间: 2015-11-10 22:23
代码2  调用eat方法没有走子类的,因为子类并没有这个方法,没有重写,找不子类就去找了父类的输出,子类的eat(有参数),并没有调用它
作者: ly631960324    时间: 2015-11-10 22:50
本帖最后由 ly631960324 于 2015-11-10 22:52 编辑

1. 函数重载一个类中声明了多个同名的方法,但有不同的参数个数和参数类型。
2. 函数重写是指在子类中声明与父类同名的方法,从而覆盖了父类的方法。

这个eat()方法不构成重载,也不是重写,仅仅是单纯的子类继承了父类的方法,并且调用了该方法
作者: 過眼焱雲シ    时间: 2015-11-10 22:55
哈哈,顶个贴
作者: xiao15779706    时间: 2015-11-11 09:14
顶一个  有收获




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