黑马程序员技术交流社区

标题: 抽象类的构造方法是创建新对象吗 [打印本页]

作者: 于世德    时间: 2013-7-17 16:29
标题: 抽象类的构造方法是创建新对象吗
  1. public abstract class Emp{
  2. private String name;

  3. public Emp(String name){

  4. this.name = name;
  5. }
  6. //setter and getter method

  7. public abstract void work();

  8. }

  9. class Manager extends Emp{
  10. private double bonus;

  11. public Manager(String name,double bonus){
  12. super(name);
  13. this.bonus = bonus;

  14. }
  15. public void work(){

  16. ...
  17. }

  18. }
复制代码
当创建Manager类的一个实例时,会调用抽象类的构造方法,抽象类不是不可以被实例化吗?

作者: xscn    时间: 2013-7-17 16:56
本帖最后由 xscn 于 2013-7-17 17:07 编辑

抽象类可以声明对象,不可以实例化对象。必须依靠子类来实例化。
抽象类也可以像普通类一样,有构造方法、一般方法、属性,更重要的是还可以有一些抽象方法,留给子类去实现,而且在抽象类中声明构造方法后,在子类中必须明确调用。抽象类的子类必须复写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。
就举你这个例子,Emp类是个抽象类,是不能用new关键字去产生对象的,因为Manager extends Emp,子类在实例化时,因为父类申明了构造方法,所以必须调用。

作者: 于世德    时间: 2013-7-17 17:07
我个人的感觉好像是调用super(name);只是初始化父类的变量,并没有创建对象;这个与new 对象的构造器不同,用关键字new jvm会在对内存中开辟空间,然后调用对象的构造函数。


作者: yangchao8907    时间: 2013-7-17 17:24
抽象类中的构造方法的作用,就是为子类提供默认的构造方法的实现。主要应用是它的所有子类都有一个相同功能的构造方法,写在父类中是为了代码复用
作者: 在乎..    时间: 2013-7-17 17:35
我的理解是:调用父类的构造方法,并没有实例化抽象类  只是调用的父类的构造函数而已。实例化不是new出来的吗?还有,当你A是B的父类并且是抽象类  A  a  =  new  B();这不是单单只是
父类  引用 =  子类实例化对象吗,希望采纳咯!




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