黑马程序员技术交流社区

标题: 调用了构造方法等同于实例化对象吗? [打印本页]

作者: 会飞的狼    时间: 2013-8-28 12:37
标题: 调用了构造方法等同于实例化对象吗?
以前一直以为只要调用了构造方法就实例化了对象,其实不然,在思考继承和抽象的时候发现,抽象类是可以有构造方法的,但是不能实例化,一个抽象类的子类实例化过程中是调用了父类的构造方法的,但是父类没有实例化:
abstract class A1 {
A1(){
  System.out.println("A1");
}
  public abstract void show();
}

class A2 extends A1{
A2(){
  System.out.println("A2构造方法");
}
public void show(){
  System.out.println("A2.show方法");;
}
这里new A1();是错误的,无法通过编译;
但是new A2();结果:
A1构造方法
A2构造方法

作者: 肖博    时间: 2013-8-28 14:06
抽象类的特点:
抽象方法一定在抽象类中,抽象类不可以创建对象,抽象类中的方法被使用必须由子类覆写抽象类中的所有抽象方法,建立子类对象调用,如果子类只覆盖了部分抽象方法,子类还是一个抽象类
A1是抽象类无法创建对象,A2继承了A1,A2覆写了A1的抽象方法,可以创建对象,它会默认调用A1的构造函数,进行初始化,就相当于A2的构造函数的第一行,隐藏了super();
作者: masterV    时间: 2013-8-28 14:20
每个子类的构造方法中都传会调用父类的构造方法啊
作者: 罗凯健    时间: 2013-8-28 15:30
我觉得你这样说有点奇怪,既然能通过编译,其实就已经是实例化了一个对象。而编译不通过,不就说明调用不成功吗。




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