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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨兴庭 于 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

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

4 个回复

倒序浏览
首先你要清楚:
你的Child类继承了Parent,因为你的两个sing()方法时一模一样的,那么Child中的sing()方法是对父类Parent中sing()方法的复写,则在子类调用的时候运行的就是子类的sing()方法,所以打印结果是 Child is singing。

希望对你有帮助!{:soso_e141:}

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
Child child = new Child();  是创建了一个对象
child.sing();  是对象调用本类函数
因为子类复写父类sing方法,所以就  打印的是 child is singing     

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
因为你的类构造函数是默认构造函数,是一个空构造函数,所以没有child.sing();  这行代码,虽然你创建了对象,但是调用了空构造函数,空构造函数没有执行任何操作,所以打印是没有内容的。

希望对你有帮助!{:soso_e141:}
回复 使用道具 举报
1,你创建了子类对象 调用子类方法(重写父类sing()方法) 打印出来的自然是child is singing
2,构造方法名与类名是相同的 Child类中有默认构造方法Child(),方法体内部为空,不调用sing()方法自然就不打印了

希望能帮到你  共同学习

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

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