黑马程序员技术交流社区

标题: 关于构造器Constructor的问题。 [打印本页]

作者: 于海生    时间: 2011-12-31 18:05
标题: 关于构造器Constructor的问题。
本帖最后由 于海生 于 2012-1-1 07:52 编辑

构造器Constructor能不能被重写,为什么?
作者: 詹英鹏    时间: 2011-12-31 18:21
当然不可以被重写
因为override是在子类中重写父类的方法,  想要重写构造器,
就是子类里有父类的构造函数,还有子类本身的构造函数,
构造函数是没有返回类型的,而只有构造函数不带返回类型,
一个 类两个不同名的构造函数,这很显然是不行的。
但如果可以在子类中写与父类构造函数同名的函数,但这个是子类的新函数,和父类没有关系。
作者: 林晓波    时间: 2011-12-31 18:48
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading

作者: 周吉明    时间: 2011-12-31 19:04
认识一下java的constructor:
      每创建一个类的实例都去初始化它的所有变量是乏味的。如果一个对象在被创建时就完成了所有的初始工作,将是简单的和简洁的。因此,Java在类里提供了一个特殊的成员函数,叫做构造函数(Constructor)。
  一个构造函数是对象被创建时初始对象的成员函数。它具有和它所在的类完全一样的名字。一旦定义好一个构造函数,创建对象时就会自动调用它。构造函数没有返回类型,即使是void类型也没有。这是因为一个类的构造函数的返回值的类型就是这个类本身。构造函数的任务是初始化一个对象的内部状态,所以用new操作符创建一个实例后,立刻就会得到一个清楚、可用的对象。

构造方法是一种特殊的方法,具有以下特点。
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
(4)构造方法不能由编程人员调用,而要系统调用。
(5)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
(6)构造方法可以重载,以参数的个数,类型,或排列顺序区分。

java 构造函数的执行过程:

类初始化时构造函数调用顺序:
  (1)初始化对象的存储空间为零或null值;
  (2)调用父类构造函数;
  (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式;
     Rmb r=new Rmb();
     
     public Dollar(){
      
      System.out.println("Dollar is construct!");
     
     }
     public static void main(String[] args){
      
      new Dollar();
      
     }
}

class Money{
public Money(){
  System.out.println("Money is construct");
}
}

class Rmb{
public Rmb(){
  System.out.println("RMB is construct");
}
}

输出结果:
Money is construct
RMB is construct
Dollar is construct!



作者: 李盈科    时间: 2011-12-31 20:06
不能被重写 也不能继承 如果子类想调用父类的构造方法要用super()
作者: 陈丹阳    时间: 2011-12-31 21:20
构造函数与类同名,而不同类肯定不同类名,因此每个类的构造函数必须不同名(因此无法重写)。
但同一个类可以有多个不同的构造函数(即重载)
子类的构造函数中需要首先调用父类的构造函数(显式或隐式)




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