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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class  {  
       
        public l(String name) {
               
                System.out.println("(String name)");
        }
}

class extends  {
        public () {
                super("hello");    //这里为什么用super调用的带参构造方法呢,子类的无参构造方法难道不能直接执行?????????
                System.out.println("D()");
        }

        public D(String name) {
                super(name);
               
                System.out.println("D(String name)");
        }
}

class AD {
        public static void main(String[] args) {
               
        }
}

2 个回复

倒序浏览

  1. class A{
  2.         public static String name;
  3.         /*当一个类中没有手动定义构造函数的时候,虚拟机会自动加上空参数的构造函数
  4.          * 而一旦当我们定义了自己构造函数,系统就不会在为其添加任何构造函数
  5.          * 也就是说,如果一个像A这样的类中,只有一个(一个String类型参数)构造函数
  6.          */
  7.         public A(String name){
  8.                 System.out.println("hello java");
  9.         }
  10. }

  11. class D extends A{
  12.         
  13.         public D(){
  14.                
  15.                 /*子类对象在创建的时候,其构造函数首先会访问父类是如何初始化的
  16.                  * 如果没有指定访问父类中那个构造函数,都有默认有隐式的super()语句
  17.                  * 即访问父类中的空参数构造函数
  18.                  *
  19.                  * 你的问题:
  20.                  * 要用父类中空构造函数时候,由于你指定了带参数的构造函数A(String name)
  21.                  * 虚拟机没有再为你添加空参数构造函数A()
  22.                  * 所以会报找不到A()构造函数
  23.                  */
  24.                 super();
  25.                 System.out.println("hello world");
  26.         }
  27.         
  28.         public D(String name){
  29.                 super(name);//所以这里是正确的
  30.                 System.out.println("hello itcast" );
  31.         }
  32. }
复制代码

回复 使用道具 举报 1 0
相当详细!!!!!1谢谢啊  这么厉害  入学测试肯定可以哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马