黑马程序员技术交流社区

标题: 求大神讲解一个带super的代码!!!!!!!! [打印本页]

作者: 冷锋也温柔    时间: 2014-8-9 23:36
标题: 求大神讲解一个带super的代码!!!!!!!!
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) {
               
        }
}


作者: jiangweibin2573    时间: 2014-8-9 23:58

  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. }
复制代码


作者: 冷锋也温柔    时间: 2014-8-10 22:44
相当详细!!!!!1谢谢啊  这么厉害  入学测试肯定可以哦




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