Java 创建新类三、 创建子类
而在面向对象方法学中,创建子类就是用以实现软件复用。在这一小节中,学习如何继承一个类,创建出更有特色的子类。
举个例子,我们在程序中定义了一个类:“交通工具”,而这时我们需要一个“客机”类,我们就可以通过继承“交通工具”类共性(公用变量和方法),然后新增一些“客机”类独有的属性和方法,就能够很轻松地构建出新的类来。
假设我们已有一个交通工具类vehicle:
源程序:vehicle.java
public class vehicle
{
public int passenger;
public float carfare;
public vehicle()
{
passenger=0;
}
public vehicle(int p)
{
passenger=p;
}
public getgrossEarnings()
{
float grossEarnings= passenger*carfare;
return grossEarnings;
}
}
在这个类中,有两个成员变量:
1) passenger:定义为公用的,整型数,用于存放乘客总数;
2) carfare:定义为公用的,浮点数,用于存放票价。
同时,构造了两个构造器方法:
1) 如果没带参数,则将成员变量passenger赋值为0;
2) 如果带上了一个int型参数,则将成员变量passenger赋值为这个数。
另外,在程序中还有一个方法:getgrossEarnings(),它用来统计这次的总收入(当然是乘客数乘以票价)。
分析完这个类后,我们现在需要构建一个“客机”类,完成的功能与“交通工具”类相同。这时,我们就可以使用创建子类的方法来构建这个“客机”类:plane。
源程序:plane.java
public class plane extends vehicle
{
public int baggage;
public float bPrice;
public plane()
{
super();
baggage=0;
}
public plane(int p,int b)
{
super(p);
baggage=b;
}
public getgrossEarnings()
{
float grossEarnings= passenger*carfare+baggage*bPrice;
return grossEarnings;
}
}
下面,我们来分析一下这段程序:
1)public class plane extends vehicle
第1句,是用来定义类的。它与其它类的定义不同的地方是后面加上了extends vehicle,其中extends的意思是扩展,也就是plane类是从vehicle类中扩展的,也就是说plane是vehicle的子类。
2)
public int baggage;
public float bPrice;
由于在客机上,行李也是计费的,因此,我们需要加上两个变量baggage和bPrice,这样,plane类就有了四个成员变量:
§ passenger:从超类vehicle中继承,用于存放乘客总数;
§ carfare:从超类vehicle中继承,用于存放票价;
§ baggage:新的成员变量,整型,用于存放计费行李总公斤数;
§ bPrice:新的成员变量,浮点数,用于存放每公斤行李的运费。
3)
public plane()
{
super();
baggage=0;
}
这一段程序构建了一个构造器方法。在这个方法中使用了一个第一次遇到的语句:
super();
这个语句是用来调用超类的构造器,也就是调用了vehicle类的构造器vehicle()。
同样,我们以相同的方法定义了另一个构造器plane(int p,int b)。
4)
public getgrossEarnings()
{
float grossEarnings= passenger*carfare+baggage*bPrice;
return grossEarnings;
}
由于行李也要计费了,所以总收入的计算方法也就不一样了,因此,在plane类中重新定义了方法getgrossEarnings,这叫做“方法overlay”。实际上就是指在子类中,重新定义一个新的同名方法,替换掉超类中定义的同名方法。