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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 唐兴旺 于 2012-2-24 20:49 编辑

class  A
{
        public A()
        {
                System.out.println("A不带参数构造方法");
        }
}
class B extends A
{
        public B()//这时候会默认调用A的不带参数构造函数,继承原则里B是不继承A的构造函数的,为什么默认调用?
        {
        System.out.println("B不带参数构造函数");
        }
}
public class C
{
        public static void main(String [] args)
        {
                B ceshi=new B();
        }
}
我说明一下,我不是不明白B怎么调用A的无参数构造方法,只是觉得与继承里的概念有点小矛盾,那句子类不继承父类的构造函数怎么理解?

12 个回复

倒序浏览
因为子类是从父类继承来的,要先有父类对象的初始化才能进一步构造子类,这就像没有父亲就没有儿子。。
回复 使用道具 举报
刘丁 发表于 2012-2-23 14:24
因为子类是从父类继承来的,要先有父类对象的初始化才能进一步构造子类,这就像没有父亲就没有儿子。。 ...

继承原则不是不继承父类构造方法?构造方法的作用是初始化,既然不继承,怎么默认执行父类构造方法(父类对象初始化)。
回复 使用道具 举报
构造B的时候编译器会先构造A 只会自动调用不带参数的构造函数 如果你把A的构造函数改为带参数的 B就不能初始化了
回复 使用道具 举报
顶一下,看看还有其他朋友的讲解帮助理解吗?
回复 使用道具 举报
在构造A时先构造其父类B,这是java的机制。既然实例化,java定能通过子类找到父类,调用其构造函数。
回复 使用道具 举报
,继承原则里B即子类是不继承A父类的构造函数的??这个结论哪里来的 我怎么不知道啊
回复 使用道具 举报
唐学松 黑马帝 2012-2-23 21:19:12
8#
每个子类构造方法的第一条语句,都是隐含地调用super(),
回复 使用道具 举报
泮和顺 发表于 2012-2-23 20:02
,继承原则里B即子类是不继承A父类的构造函数的??这个结论哪里来的 我怎么不知道啊 ...

不能继承父类的构造方法这句话是有的,你可以再翻翻资料
回复 使用道具 举报
泮和顺 发表于 2012-2-23 20:02
,继承原则里B即子类是不继承A父类的构造函数的??这个结论哪里来的 我怎么不知道啊 ...

子类不能继承父类构造方法,这句话是有的,你可以翻翻资料,需要父类构造方法用super调用
回复 使用道具 举报
或许反射的getDeclaredConstructors() 方法能帮助你分析和理解。
回复 使用道具 举报
重新看了教材  不带参数的构造函数本身就系统默认调用 写了跟没写差不多 所以不管之间的关系怎么样 根本不存在调用的问题
回复 使用道具 举报
public B()//这时候会默认调用A的不带参数构造函数,继承原则里B是不继承A的构造函数的,为什么默认调用?
        {
        super()//不写是默认有这一句        System.out.println("B不带参数构造函数");
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马