黑马程序员技术交流社区
标题:
抽象类的构造方法是创建新对象吗
[打印本页]
作者:
于世德
时间:
2013-7-17 16:29
标题:
抽象类的构造方法是创建新对象吗
public abstract class Emp{
private String name;
public Emp(String name){
this.name = name;
}
//setter and getter method
public abstract void work();
}
class Manager extends Emp{
private double bonus;
public Manager(String name,double bonus){
super(name);
this.bonus = bonus;
}
public void work(){
...
}
}
复制代码
当创建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