1. 构造函数:完成对象的初始化工作 以下代码为何无法通过编译?哪儿出错了? 编译器提示:构造函数Foo()未定义 //正确代码如下 public class Test { public static void main(String[] args) { Foo obj1=new Foo(); } } class Foo{ int value; Foo(){ } public Foo(int initValue) { value=initValue; } } 构造函数应注意: 1.构造函数没有返回值,也不能用void修饰. 如果不小心给构造函数前面添加了返回值类型,那么这将使这个构造函数变成一个普通的方法, 在运行时将产生找不到构造方法的错误。 2.如果类的构造函数被重写了,如上例,Foo类已经有了一个有参数有方法体的构造函数,这时编译器就不会再给它默认加上一个无参且方法体为空的构造函数.可以理解为无参的构造函数被覆盖了.这种情况称为 没有默认构造函数. 3.构造方法可以重载,以参数的个数,类型,顺序。 4.一个类可以定义多个构造方法,如果写的类里面没有构造函数,那么编译器会默认加上一个无参数且方法体为空的构造函数. 2. 在函数的继承里,子类必须调用父类的构造函数。但是,子类只能继承父类的 默认 构造函数,如果父类没有默认的构造函数,那子类不能从父类继承默认构造函数