摘自《其实你应该这样学Java》
11.1 什么是继承
Java中的继承分为类的继承和接口的继承两种,
类的继承只支持单继承,就是子类只能有一个父亲类;
接口的继承可以是多重继承,可以有多个父亲类。
11.2 子类
11.2.2 子类的使用
子类隐式包含父类的成员变量和方法,不用再写,这就是继承的优点。
子类包含父类的成员,不是子类和父类共享成员,而是子类和父类中都能各自开辟空间,产生性质相同而又独立的成员变量和方法。
11.2.3 子类的构造方法
在子类创造对象时会执行子类的构造方法。
因为子类继承自父类,所以在子类构造方法之前必须先执行父类的构造方法。
在子类构造方法中第一条语句必须是调用父类的构造方法的语句,如果无此语句,则默认调用无参的父类构造方法。
public class Example1102 { public static void main(String [] args) { SonClass sc = new SonClass(); } } class SuperClass { SuperClass() { System.out.println("Super"); } } class SonClass extends SuperClass { SonClass() { System.out.println("SubClass"); } }
该程序由父类 SuperClass 和子类 SonClass 及主类组成。主类中只有生成子类对象的语句:
SonClass sc = new SonClass();
这条语句执行时,会调用子类构造方法;
在子类构造方法中,第一条语句要执行父类构造方法。
上面子类中构造方法是隐式调用父类构造方法。(a. 隐式调用的是默认无参构造方法)
也可以b. 显示调用父类构造方法,通过语句super()来完成。
如果要c. 调用父类的有参构造方法,则在super()的括号中加入所需的参数。
d. 如果父类构造方法不带参数,则这样的显示调用可以省略,这种调用是由Java程序自动进行的(隐式调用)。
e. 如果父类中没有无参的构造方法,只有一个或多个有参构造方法,则程序找不到默认无参方法,就一定要用super(参数a, 参数b, ...)调用父类构造方法。
-
public class Example1103 { public static void main(String[] args) { SonClass sc = new SonClass(); } } class SuperClass { SuperClass(int a, int b) { System.out.println(a+b); } } class SubClass extends SuperClass { SonClass() { super(1, 2); //父类中是有参构造方法,需要super() System.out.println("SubClass"); } }
-