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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 头狼 中级黑马   /  2014-12-21 23:30  /  3235 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

无参的构造方法可以调用有参的构造方法吗?为什么子类的构造方法一定会调用父类的构造方法呢?

12 个回复

倒序浏览
可以。         因为是子类,会把父类中public的方法继承下来,同时又可以定义自己的方法。
回复 使用道具 举报
子类的无参构造方法不能调用父类的带参构造方法
回复 使用道具 举报
构造方法这里我研究了好长时间,比较凌乱,总结了下。
1.构造方法的作用是:在创建类的对象的时候,对对象进行初始化,也就是说,只要一创建对象,那么就让该对象的成员有一定的值。
2.构造方法的声明是很特殊的:没有返回值,方法名跟类名一致,所以——子类不能继承父类的构造方法,因为父类构造方法名与子类类名是不一样的。
3.子类可以使用super在构造方法中调用父类的构造方法。这么做的意义是,子类在创建对象的时候,要先查看下父类的构造方法对对象做过一些什么操作,如果子类不调用父类构造方法,那么子类在创建对象的时候有可能会漏掉父类构造方法对对象的初始化操作。
举个例子:----------
public class A {
    //无参构造方法
    public A(){
        System.out.println("aaaaaaaa");
    }
    //有参构造方法
    public A(int i){
        System.out.println(i);
    }
}

public class B extends A {
    //B的构造方法
    public B(){
        super(1);//调用父类有参的构造方法
        System.out.println("bbbbbbb");
    }
   
    public B(int i){
        System.out.println("cccccccccc"+i);
    }
    public static void main(String[] args) {
        new B();
        new B(5);//调用的是无参构造方法,注意的是,该构造中没有用super来调用父类构造,但系统会默认调用父类的无参构造方法
    }
}

好了,感觉上就这些,我把new B()  和new B(5)来回调用,对比出的结果

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
无参的构造函数可以调用有参的构造方法,子类调用父类的构造函数是为了初始化父类对象。
回复 使用道具 举报
有一个默认的super()存在
回复 使用道具 举报
头狼 中级黑马 2014-12-22 22:03:42
7#
duluhua 发表于 2014-12-22 10:18
构造方法这里我研究了好长时间,比较凌乱,总结了下。
1.构造方法的作用是:在创建类的对象的时候,对对象 ...

前面能看懂,代码有点不明白
回复 使用道具 举报
可以的了       super(参数1,参数2,.....);
回复 使用道具 举报
cz萑 中级黑马 2014-12-22 22:26:29
9#
本帖最后由 cz萑 于 2014-12-22 22:39 编辑

class   B
{
     B()      
     {
         this(5);
      }
     B(int n)
     {
           System.out.println(n);
        }
第二个问题,子类的构造方法里都隐藏着super()用来指向父类的构造方法
回复 使用道具 举报
新手了解了解
回复 使用道具 举报
板凳分析得很详细,受教了……
回复 使用道具 举报
第一个问题代码示例验证可以:
class Demo
{
       
        public static void main(String[ ] args)
        {
                System.out.println("hahahaha");
                new Demo1();
        }
}
class Demo1
{
        Demo1()
        {
                this(2);
                System.out.println("*********");
        }
        Demo1(int a)
        {
                System.out.println(a);
        }
}

第二个问题关于子父类的初始化,老毕视频说的很仔细
回复 使用道具 举报
头狼 发表于 2014-12-22 22:03
前面能看懂,代码有点不明白

就像楼上说的,如果你再子类构造方法中没有用super()调用父类构造方法,那么系统会默认一个super()方法来调用父类的构造方法。  如果你显示的用super()的调用了那么就调用的是父类中super()对应的构造方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马