黑马程序员技术交流社区

标题: java学习中遇到的一些问题!简单却困惑着我 [打印本页]

作者: Hello_world_    时间: 2013-7-28 19:08
标题: java学习中遇到的一些问题!简单却困惑着我
本帖最后由 杨兴庭 于 2013-7-28 23:23 编辑

public class PolyTest
{
        public static void main(String[] args)
        {               
                Child child = new Child();  疑问2 new出来一个  不就已经调用了类得构造方法  为什么 还要调用child.sing()
                child.sing();  没有此行什么也不打印  为什么,额??
        }
}

class Parent
{
        public void sing()
        {
                System.out.println("parent is singing");
        }
}

class Child extends Parent
{
        public void sing()
        {
                System.out.println("child is singing");
        }
}
  运行结果是:child is singing     运行结果为什么不是parent is singing  child is singing

作者: 王松松    时间: 2013-7-28 19:17
首先你要清楚:
你的Child类继承了Parent,因为你的两个sing()方法时一模一样的,那么Child中的sing()方法是对父类Parent中sing()方法的复写,则在子类调用的时候运行的就是子类的sing()方法,所以打印结果是 Child is singing。

希望对你有帮助!{:soso_e141:}
作者: Joesph    时间: 2013-7-28 19:20
Child child = new Child();  是创建了一个对象
child.sing();  是对象调用本类函数
因为子类复写父类sing方法,所以就  打印的是 child is singing     
作者: 王松松    时间: 2013-7-28 19:22
因为你的类构造函数是默认构造函数,是一个空构造函数,所以没有child.sing();  这行代码,虽然你创建了对象,但是调用了空构造函数,空构造函数没有执行任何操作,所以打印是没有内容的。

希望对你有帮助!{:soso_e141:}
作者: 手心里的温柔    时间: 2013-7-28 19:31
1,你创建了子类对象 调用子类方法(重写父类sing()方法) 打印出来的自然是child is singing
2,构造方法名与类名是相同的 Child类中有默认构造方法Child(),方法体内部为空,不调用sing()方法自然就不打印了

希望能帮到你  共同学习




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