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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何拴绪 中级黑马   /  2012-6-2 22:23  /  1324 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到有些类定义了有参数的构造方法,为什么还要定义没有参数的构造方法?

3 个回复

正序浏览
从下面一段代码可以回答你的问题
当父类是有参数的构造函数,而且未定义无参构造函数,而子类定义了无参构造函数时
  1. class Fu{
  2.         Fu(String name){
  3.                
  4.         }
  5. }
  6. class Zi extends Fu{
  7.         private int i;
  8.         Zi(){//报错未定义父类无参构造函数
  9.                 i = 1;
  10.         }

  11. }
复制代码
回复 使用道具 举报
这么说吧,每个类都有构造方法,即使你不给出构造方法,系统也会提供默认的构造方法,一般是不带参数的构造方法,因为类是对象的模板,类就是用构造方法来创建对象的。
默认的构造方法是无参数的,但是如果你已经在类里定义了一个或多个构造方法,那么JAVA就不会提供默认的构造方法了。你还用不带参数的语句想用默认的构造方法创建对象的话,那就是非法语句。(除非你自己定义了一个不带参数的构造方法)构造方法可以重载,所以你可以有多个构造方法。而且你至少有一个构造方法(在你不定义的时候,系统默认给出的一个)

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
1,在很多时候我不能得到类的源文件,但是我们可以得到.class文件这样有了那个空参数构造函数就可以通过Class.newInstance方法来实例对象。
        例如:
  1. String obj = (String)Class.forName(“Java.lang.String”).newInstance();
复制代码
2,子类继承父类的时候会自动继承父类的默认构造函数(也就是继承那个无参数的构造函数)。
        而你的类里面已经有一个带有参数的构造函数了,如果你没有写那个默认的不带参数的构造函数的话,
        继承的时候子类就会报错,因为系统不知道要不继承哪个构造函数,必须明确的使用super()关键字来描述。
        所以我们一般为了避免这种错误的发生,在有带有多个构造函数的类里面都会写一个不带参数的构造函数。
希望能帮到你

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马