黑马程序员技术交流社区

标题: 继承与子类无参数构造函数默认调用父类无参数构造函数 [打印本页]

作者: 唐兴旺    时间: 2012-2-23 14:18
标题: 继承与子类无参数构造函数默认调用父类无参数构造函数
本帖最后由 唐兴旺 于 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的无参数构造方法,只是觉得与继承里的概念有点小矛盾,那句子类不继承父类的构造函数怎么理解?
作者: 刘丁    时间: 2012-2-23 14:24
因为子类是从父类继承来的,要先有父类对象的初始化才能进一步构造子类,这就像没有父亲就没有儿子。。
作者: 唐兴旺    时间: 2012-2-23 14:47
刘丁 发表于 2012-2-23 14:24
因为子类是从父类继承来的,要先有父类对象的初始化才能进一步构造子类,这就像没有父亲就没有儿子。。 ...

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

不能继承父类的构造方法这句话是有的,你可以再翻翻资料
作者: 唐兴旺    时间: 2012-2-23 21:20
泮和顺 发表于 2012-2-23 20:02
,继承原则里B即子类是不继承A父类的构造函数的??这个结论哪里来的 我怎么不知道啊 ...

子类不能继承父类构造方法,这句话是有的,你可以翻翻资料,需要父类构造方法用super调用
作者: tanlei200620    时间: 2012-2-23 23:53
或许反射的getDeclaredConstructors() 方法能帮助你分析和理解。
作者: 泮和顺    时间: 2012-2-24 08:59
重新看了教材  不带参数的构造函数本身就系统默认调用 写了跟没写差不多 所以不管之间的关系怎么样 根本不存在调用的问题
作者: 【专】【属】    时间: 2012-2-24 09:45
public B()//这时候会默认调用A的不带参数构造函数,继承原则里B是不继承A的构造函数的,为什么默认调用?
        {
        super()//不写是默认有这一句        System.out.println("B不带参数构造函数");
        }





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