2018/01/08JAVA 基础 / 接口与继承:[Q]:若父类Hero提供了一个有参的构造方法,但是没有提供无参的构造方法。子类应该怎么处理?
在子类中实例化一个ADHero(), 如下第10~13行:
1 package charactor; 2 3 public class ADHero extends Hero implements AD{ 4 5 @Override 6 public void physicAttack() { 7 System.out.println("进行物理攻击"); 8 } 9 10 public ADHero(){ 11 12 System.out.println("AD Hero的构造方法"); 13 } 14 15 public static void main(String[] args) { 16 17 new ADHero(); 18 19 } 20 21 }
再在主方法中通过实例化,其构造方法会被调用。其父类的构造方法也会被调用 ,并且是父类构造方法先调用 ,子类构造方法会默认调用父类的无参的构造方法
[Q]:若父类Hero提供了一个有参的构造方法,但是没有提供无参的构造方法。子类应该怎么处理?以下是父类的有参构造方法:
1 public Hero(String name){ 2 this.name = name; 3 }
[A]:由于作为子类,无论如何 都会调用父类的构造方法。默认情况下,会调用父类的无参的构造方法。 但是,当父类没有无参构造方法的时候( 提供了有参构造方法,并且不显示提供无参构造方法),子类就会抛出异常,因为它尝试去调用父类的无参构造方法。
这个时候,子类应该必须通过super去调用父类声明的,存在的,有参的构造方法。
1 package charactor; 2 3 public class ADHero extends Hero implements AD{ 4 public ADHero() { 5 super("");//super("")调用的是父类的有参构造方法Hero(String name); 6 } 7 8 @Override 9 public void physicAttack() { 10 System.out.println("进行物理攻击"); 11 } 12 }