黑马程序员技术交流社区

标题: 关于构造函数的疑问.. [打印本页]

作者: 泮和顺    时间: 2012-3-10 20:41
标题: 关于构造函数的疑问..
本帖最后由 泮和顺 于 2012-3-11 08:26 编辑

public class  StudyTest
{
        public static void main(String[] args)
        {       
               
                Person p=new Person();
        }
}
class Person
{
        Person(String name)
        {
                this.name=name;

        }

         //method(){}

        private String name;
     
}//编译失败 提示错误参数不匹配 结论是至少有个构造函数,但是没有默认构造函数 这样就出错
但是所有类不是Object子类吗 不是可以继承Obect的默认构造函数吗 感觉真是特别的别扭啊

1突然想明白了 总结下,虽然所有类都是Object类的子类 但是构造函数是不能继承,因为类名字根本就不一样继承了还出错呢
2 没有默认无参构造并且其他构造函数系统会给你个(赋0,null等等),如果你自己随便写个不管带不带参数系统就不给你默认无参数

还有关于super只能放置块里面第一行。。(位于其他语句之后可能会出错)
作者: 倪鹏博    时间: 2012-3-10 20:44
本帖最后由 倪鹏博 于 2012-3-10 20:45 编辑

默认构造函数是你没有自定义构造函数的时候才存在的——这是构造函数存在打前提条件,跟继承也是没关系的!所以当你自定义了Person(String name)构造函数之后,类中就没有默认构造函数了!而你new Person(),当然提示找不到构造函数啦!
作者: 泮和顺    时间: 2012-3-10 20:46
倪鹏博 发表于 2012-3-10 20:44
默认构造函数是你没有自定义构造函数的时候才存在的!所以当你自定义了Person(String name)构造函数之后, ...

同意了,你没有构造函数的话系统才给你个无参数构造函数。。。你有了它就不给你了。。。
作者: 许圣建    时间: 2012-3-10 21:17
其实JAVA在这里还是可以改进的,比如编译时期判断到底有没有空参构造函数,没有的话,不管程序员故意的还是无意的,一律自动补齐,这样程序员操心的事就更少了。
当然现在的情况是只要你定义了任意一个构造函数,就不会再替你定义这个空参构造函数了。
楼主还有一点认识是不对的,你想想如果构造函数能继承,那么继承的函数叫什么名字呢?叫Object()?
你不要忘记了构造函数是生成一个类的依据,你构造函数的名字和类的名字怎能不一致?
另外提醒,子类构造函数中默认自动添加的都是super()空参,你希望添加含参的自己动手。
作者: 泮和顺    时间: 2012-3-10 22:26
许圣建 发表于 2012-3-10 21:17
其实JAVA在这里还是可以改进的,比如编译时期判断到底有没有空参构造函数,没有的话,不管程序员故意的还是 ...

我说的Object是所有类的父类,
作者: 刘豪杰    时间: 2012-3-11 03:04
子类的构造函数可以通过super关键字显式调用父类中的构造函数。如果子类中的构造函数没有显式调用父类中的构造函数,编译器就会自动在子类的构造函数中调用父类中参数为空的构造函数。于是,当父类中没有参数为空的构造函数,而子类中又没有显示调用父类的其他构造函数,编译时就会报错。这一点需要特别注意。默认构造函数是无参的,而你的代码中
        Person(String name)
        {
                this.name=name;
        }
相当于是对Person()进行了重载,Person()并不一样,所以编译时会出错
作者: 黑马张平    时间: 2012-3-11 14:59
不懂。还要学习!
作者: 秦超    时间: 2012-3-11 16:55
当你没有说些构造函数的时候,系统默认给你添加一个无参的构造函数,当你自定义构造函数的时候,系统就不再给你添加了.
你自定义的构造函数是有参数的,但是创建对象的时候是无参数的,所以提示找不到构造函数.
作者: 张希强    时间: 2012-3-11 17:07
你已经定义了一个带参数的构造方法,编译器就不会为你自动建立那个不带参数的默认构造方法了。
自己再写一个不带参数的构造方法吧。




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