本帖最后由 lancerjs 于 2014-7-9 19:26 编辑
Java中子类只能直接调用父类的构造,不能直接调用超类中的构造.
但所有构造方法中默认情况下都有一个隐藏的super(),所以要想调用超类中的空参构造是不需要做任何处理的,
子类想调用超类中的有参构造时,需要在父类的一个构造方法中的第一行使用super指向超类中的有参构造,然后在子类的一个构造方法中的第一行使用super指向父类的这个构造方法.
下面这段代码你可以自己添加main方法,使用A的两个构造分别创建对象试验一下,应该就能明白了- class C {
- // C的空参构造
- public C() {
- }
- // C的有参构造
- public C(int c) {
- }
- }
- class B extends C {
- // B的无参构造,第一行有隐藏的super()
- public B() {
- }
- // 要在B的子类中调用C的有参构造,需要在B的一个构造中提供C的有参构造的调用
- public B(int b) {
- // 通过super(传递一个参数)调用B的有参构造
- super(b);
- }
- }
- class A extends B {
- // A的无参构造,第一行有隐藏的super()
- public A() {
- }
- // A想调用C的有参构造,就要调用B中调用了C的有参构造的构造方法
- public A(int a) {
- super(a);
- }
- }
复制代码
|