对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且派生类可以修改或增加新的方法使之更合适特殊的需要。
1.继承的产生(extends关键字)
在Java语言中,类的继承很简单,使用extends关键字。
【例1-1】定义Clock的子类----使用extends关键字。
定义Clock类:
public class Clock
{
//成员变量
int hour; //变量hour用来描述对象的状态,以下同理
int minute;
int second;
//成员方法
public void setTime(int newH, int newM, int newS)
{
hour = newH;
minute = newM;
second = newS;
}
public void showTime()
{
System.out.println(hour+":"+minute+":"+second);
}
}
使用extends关键字实现对Clock类的继承:
public class subClock extends Clock
{
String clock;
}
说明:
(1)public class subClock extends Clock 表示子类 subClock 继承自父类 Clock。
(2)子类拥有父类所拥有的成员属性和方法。
(3)“String clock;”语句表示子类可以定义自己独有的属性,同理也可以拥有自己独有的方法。
Java语言中的继承与C++不同,所有类均从一个根类Object中派生出来。除Object之外的任何类都有一个直接的超类。如果一个类在声明是未指明其直接超类,那么默认即为Object。
例如:
class Point
{
float x, y;
}
与下面等价:
Class Point extends Object
{
float x, y;
}
也就是说Java的所有类只有唯一的一个父类,继承关系使得Java中所有的类构成一棵树,Object类就是这棵树的根。
2.继承与构造方法
与类的其他方法一样,构造方法也可以继承。继承的原则如下:
(1)如果子类没有定义构造方法,则继承父类无参数的构造方法,即将父类无参数的构造方法作为自己的构造方法。
(2)如果子类定义了构造方法,无论是无参数的构造方法还是带参数的构造方法,在创建子类对象时,首先执行父类的无参数构造方法,然后再执行自己的构造方法。
【例1-2】子类继承父类的无参数构造方法。
class Father
{
String s = "Run constructor method of Father";
public Father()
{
//构造方法
System.out.println(s);
}
}
class Son extends Father
{
public void output()
{
System.out.println("Run output() method of Son";
}
}
class MyClass
{
public static void main(String args[])
{
Father obfather = new Father();
Son obson = new Son;
obson.output();
}
}
【例1-3】子类定义了一个带参数的构造方法
class Father
{
String s = "Run constructor method of Father";
public Father() //父类的构造方法
{
System.out.println(s);
}
class Son extends Father
{
public Son(String str) //子类的构造方法
{
s = str;
System.out.println(s);
}
}
public void output()
{
System.out.println("Run output() method of Son");
}
}
class MyClass
{
public static void main(String arg[])
{
Father obfather = new Father();
Son obson = new Son("Run constructor of son.");
obson.output();
}
}