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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于海生 黑马帝   /  2011-12-31 18:05  /  2669 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 于海生 于 2012-1-1 07:52 编辑

构造器Constructor能不能被重写,为什么?

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

5 个回复

倒序浏览
当然不可以被重写
因为override是在子类中重写父类的方法,  想要重写构造器,
就是子类里有父类的构造函数,还有子类本身的构造函数,
构造函数是没有返回类型的,而只有构造函数不带返回类型,
一个 类两个不同名的构造函数,这很显然是不行的。
但如果可以在子类中写与父类构造函数同名的函数,但这个是子类的新函数,和父类没有关系。

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
认识一下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!


评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
不能被重写 也不能继承 如果子类想调用父类的构造方法要用super()

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
构造函数与类同名,而不同类肯定不同类名,因此每个类的构造函数必须不同名(因此无法重写)。
但同一个类可以有多个不同的构造函数(即重载)
子类的构造函数中需要首先调用父类的构造函数(显式或隐式)

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

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