抽象类的构造函数问题 | ||||||||||||
抽象类一定有构造方法,你不写编译器帮你加。因为子类的构造方法会调用super(args ...)调用父类的构造函数,如果父类没有子类需要的调用的构造函数,就会报错 | ||||||||||||
构造函数被用来建立一个对象实例,但是你不能建立一个抽象类型的实例,抽象类型的构造函数就仅仅能够被它的继承类型使用 | ||||||||||||
抽象类可以you构造函数的,当子类继承父类后,用子类去构建对象的时候,子类构造函数中会有个默认的super指向父类, | ||||||||||||
调用父类的构造函数super()(无参构造函数)。 | ||||||||||||
注意如果定义了父类的有参构造函数,并且没有显示的提供无参构造函数 覆盖继承自Object的无参构造函数, | ||||||||||||
则调用父类无参构造函数(即继承自Object的)会失败的,因为已经被覆盖 | ||||||||||||
如果在父类(也就是抽象类)中有显示的写了有参数的构造函数, | ||||||||||||
如果在父类有无参构造函数(显示写无参构造函数) | ||||||||||||
在子类的构造函数里 如果没有显示的调用父类的有参构造函数super(args...), | ||||||||||||
子类构造函数都是调用默认的 父类的无参构造函数 | ||||||||||||
在子类的构造函数里 如果有显示的调用父类的有参构造函数super(args...), 或者无参构造函数 | ||||||||||||
均可正常调用 | ||||||||||||
如果在父类没有无参构造函数(继承自Object的默认无参构造函数被有参构造函数覆盖) | ||||||||||||
在子类的构造函数里要显示的调用父类的有参构造函数,否则编译器报错,语法错误 | ||||||||||||
如果父类(也就是抽象类)中没有有参数的构造函数, | ||||||||||||
无论在父类有没有无参构造函数 | ||||||||||||
子类构造函数里是否显示调用 父类的无参构造函数,均可正常调用 | ||||||||||||
接口 | ||||||||||||
接口中不能定义构造器的理由(以下来源网页) | ||||||||||||
1. 构造器用于初始化成员变量,接口没有普通成员变量(接口可以有final static类型的成员变量) | ||||||||||||
2. 类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器链的调用次序 | ||||||||||||
3. 构造器是属于类自己的,不能继承。因为是纯虚的,接口不需要构造器
|
Interface and Abstract stuff
最新推荐文章于 2024-10-11 17:30:36 发布