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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于世德 中级黑马   /  2013-7-17 16:29  /  1673 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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类的一个实例时,会调用抽象类的构造方法,抽象类不是不可以被实例化吗?

评分

参与人数 1黑马币 +2 收起 理由
a767175432 + 2 很给力!这个问题问得太好了,求解答.

查看全部评分

4 个回复

倒序浏览
本帖最后由 xscn 于 2013-7-17 17:07 编辑

抽象类可以声明对象,不可以实例化对象。必须依靠子类来实例化。
抽象类也可以像普通类一样,有构造方法、一般方法、属性,更重要的是还可以有一些抽象方法,留给子类去实现,而且在抽象类中声明构造方法后,在子类中必须明确调用。抽象类的子类必须复写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。
就举你这个例子,Emp类是个抽象类,是不能用new关键字去产生对象的,因为Manager extends Emp,子类在实例化时,因为父类申明了构造方法,所以必须调用。
回复 使用道具 举报
我个人的感觉好像是调用super(name);只是初始化父类的变量,并没有创建对象;这个与new 对象的构造器不同,用关键字new jvm会在对内存中开辟空间,然后调用对象的构造函数。

回复 使用道具 举报
抽象类中的构造方法的作用,就是为子类提供默认的构造方法的实现。主要应用是它的所有子类都有一个相同功能的构造方法,写在父类中是为了代码复用
回复 使用道具 举报
我的理解是:调用父类的构造方法,并没有实例化抽象类  只是调用的父类的构造函数而已。实例化不是new出来的吗?还有,当你A是B的父类并且是抽象类  A  a  =  new  B();这不是单单只是
父类  引用 =  子类实例化对象吗,希望采纳咯!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马