Bourbon_KID
2016-02-03 13:27
采纳率: 100%
浏览 1.9k
已采纳

java子父类构造方法参数

子类构造方法参数一定要和父类构造方法参数相同吗,子父类构造方法参数有什么关系

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • threenewbee 2016-02-03 13:43
    已采纳
     class A
    {
        public A(int a) { }
    }
    class B extends A
    {
        public B(int b) { }
    }
    

    这不行,因为A没有无参数构造函数。派生类需要指定:

     class A
    {
        public A(int a) { }
    }
    class B extends A
    {
        public B(int b) { super(b); }
    }
    

    这样就可以

    已采纳该答案
    打赏 评论
  • threenewbee 2016-02-03 13:32

    当然不需要了。当父类没有无参数构造函数的时候,派生类构造函数必须用super(参数列表) 指明自己调用哪个基类的构造函数。
    但是派生类构造函数的参数可以不同(一般派生类的参数会更多,或者包含初始化自己特有变量的参数)

    打赏 评论
  • 91program 2016-02-03 13:36

    是没有必要。
    在初始化子类时,会调用父类,没有参数上的依赖性。参数的多与少,都是可以的。

    打赏 评论
  • threenewbee 2016-02-03 13:41
     举例:
    class A
    {
    
    }
    class B extends A
    {
        public B(int b) { }
    }
    
    以上代码可以编译,B显然有一个有参数构造函数,A没有。这没问题
    
    打赏 评论
  • threenewbee 2016-02-03 13:43
     class A
    {
        public A(int a) { }
    }
    class B extends A
    {
        public B(int b, int c) { super(b); }
    }
    

    再给B增加一点参数,这样也可以

    打赏 评论
  • 毕小宝 2016-02-03 14:06

    子类构造函数的参数跟父类构造函数的参数当然可以不一致了,因为子类继承自父类,可以有自己特有、而父类没有的一些属性。
    子类编写构造函数的时候,需要注意的是,如果父类也提供了有参构造函数,那么第一步一定是先调用父类的有参构造函数。
    所以子类构造函数的参数列表一定是包含父类有参构造函数列表。例如子类参数集合为A,父类参数集合为B,那么必须A>=B。

    打赏 评论
  • leobert_lan 2016-02-03 15:01

    当然是不一定的,我们抛开代码实现上的东西谈一下,子类是父类中更具体的一部分,而构造函数的参数是干什么的?初始化成员变量(可以理解为属性,特征),那么子类是否具有父类的属性、特征呢?当然有,而且应该具有更多的属性、特征。构造器(构造函数)的本质是创建一个内存对象,如果有必要,可以继续为该类对象初始化部分成员变量。

    打赏 评论

相关推荐 更多相似问题