黑马程序员技术交流社区

标题: 关于构造器,<已解决> [打印本页]

作者: 黑马-王建雨    时间: 2012-5-7 22:57
标题: 关于构造器,<已解决>
本帖最后由 啷个里个郞 于 2012-5-8 13:10 编辑

构造器Constructor为什么不能被不能重写,但可以被重载?
作者: 于潇    时间: 2012-5-7 23:03
构造器Constructor不能被继承,所以不能重写,但可以被重载。
作者: 郭振    时间: 2012-5-7 23:10
构造器为什么不能继承呢?不是说父类的方法没有被私有化,访问权限不大于父类子类都能继承吗?
作者: 李保成    时间: 2012-5-8 00:13
标题:
 1.构造函数的命名必须和类名完全相同;在java中普通函数可以和构造函数同名,但是必须带有返回值。   
  2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的。   
  3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的。   
  4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。而一般的方法不存在这一特点。   
  5当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象
作者: 李保成    时间: 2012-5-8 00:16
还有一点需要明确,继承是发生在子父类的成员函数或变量上。而构造器不具备这一特点。因为它没有类型,没有具体返回值。
作者: 于潇    时间: 2012-5-8 08:49
郭振 发表于 2012-5-7 23:10
构造器为什么不能继承呢?不是说父类的方法没有被私有化,访问权限不大于父类子类都能继承吗? ...

因为父类的类名和子类是不一样的,所以构造器的名字也是不同的,只能继承同名的。
作者: xiwangliujiao    时间: 2012-5-8 09:28
构造器是做什么的呢?
是对实例化对象的时候,对对象进行初始化,所以重写没用,如果你继承的话,可以用super()调用父类的构造函数。
作者: 隋营营    时间: 2012-5-8 10:05
测试程序:
public class Testext {
    public static void main(String[] args) throws Exception {
          Zi zi = new Zi();        //输出:中国  黑马
          Zi z = new Zi(10);    //输出:中国    10
    }
}

class Fu {
    Fu() {
        System.out.println("中国");
    }
}

class Zi extends Fu {
    Zi() {
         //super(); 这名若不写,系统会默认调用
        System.out.println("黑马");
    }
    Zi(int term){
        //super(); 这名若不写,系统会默认调用
        System.out.println(term);
    }
}

显然子类的构造方法(包括重载的构造方法)默认调用父类的构造方法(super())。
其实可以近似地认为它"重写"了父类的构造方法:可以调用父类的方法,还可以添加自己的逻辑。



作者: 谭景宾    时间: 2012-5-8 10:13
因为构造器Constructor类被final修饰符修饰,此类不能被继承,所以不能重写
但是可以重载。




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