第八章类与对象的扩展
【实验目的】 (1) 类的继承
?a、 掌握父类及子类的关系及创建方法 b、 掌握上转型对象的使用方法
?c、 掌握子类对象创建过程中与父类构造方法的关系,及super关键字的用法 (2) 多态与接口 a、 掌握抽象类与抽象方法的概念 b、 掌握多态的实现原理及方法 ?c、 了解成员变量的隐藏 d、 掌握接口的设计方法 【实验范例】 例1:(继承)
(1)编写一个圆类Circle,该类拥有: ①一个成员变量
Radius(私有,浮点型);// 存放圆的半径; ②两个构造方法
Circle( ) // 将半径设为0
Circle(double r )//创建Circle对象时将半径初始化为r ③三个成员方法double getArea( ) //获取圆的面积 double getPerimeter( ) //获取圆的周长
void show( ) //将圆的半径、周长、面积输出到屏幕
(2)编写一个圆柱体类Cylinder,它继承于上面的Circle类。还拥有: ①一个成员变量
double hight(私有,浮点型);// 圆柱体的高; ②构造方法
Cylinder (double r, double h ) //创建Circle对象时将半径初始化为r ③成员方法
double getVolume( ) //获取圆柱体的体积 void showVolume( ) //将圆柱体的体积输出到屏幕
编写应用程序,创建类的对象,分不设置圆的半径、圆柱体的高,计算并分不显示圆半径、圆面积、圆周长,圆柱体的体积。 程序代码:
class Circle { // 定义父类-—园类
?private double radius; // 成员变量-—园半径 ?Circle() { // 构造方法 ??radius = 0、0; ?}
?Circle(double r) { // 构造方法 ? ?}
?double getPerimeter() { // 成员方法--求园周长
radius = r;
??return 2 * Math、PI * radius; ?}
?double getArea() { // 成员方法—-求园面积 ??return Math、PI * radius * radius; ?} ? ?} }
class Cylinder extends Circle { // 定义子类-—圆柱类 ?private double hight; // 成员变量--园柱高 ?Cylinder(double r, double h) { // 构造方法 ? ?
super(r); hight = h; }
void disp() { // 成员方法—-显示园半径、周长、面积
?System、out、println("圆周长=" + getPerimeter()); System、out、println("圆面积=\ + getArea()); ??System、out、println(”圆半径=\ + radius);
?public double getVol() { // 成员方法—-求园柱体积 ??return getArea() * hight; ?}
?public void dispVol() { // 成员方法-—显示园柱体积 ?} }
public class Prog1 { // 定义主类
?public static void main(String[] args) { // 主程入口 ? ? ?} }
?Circle Ci = new Circle(10、0); // 生成园类实例 Ci、disp(); // 调用园类的方法 Cyl、disp(); // 调用父类方法
System、out、println(”圆柱体积=\ + getVol());
??Cylinder Cyl = new Cylinder(5、0, 10、0); // 生成圆柱类实例 ??Cyl、dispVol(); // 调用子类方法
例2:(重载)
设计一个汽车类Multiplication,在其中定义三个同名的mul方法:第一个方法是计算两个整数的积;第二个方法是计算两个浮点数的积;第三个方法是计算三个浮点数的积。 程序代码:
class Multiplication {
?public void mul(int a, int b) { ??int m = a * b;
??System、out、println(a + ”*” + b + ”=” + m);
}
public void mul(double a, double b) {
??float m = (float) (a * b);
?}
?System、out、println(a + ”*" + b + "=\ + m);
?public void mul(double a, double b, double c) { ??double m = a * b * c; ?} }
public class Prog1 {
?public static void main(String[] args) { ??Multiplication test = new Multiplication();
?test、mul(3, 4); ??test、mul(2、3, 3); ??test、mul(3, 4, 5); }
}
?System、out、println(a + ”*” + b + \*” + c + ”=” + m);
例3:(接口与多态)
(1) 定义一个接口CanFly,描述会飞的方法public void fly(); (2) 分不定义类飞机与鸟,实现CanFly接口、
(3) 定义一个测试类,测试飞机与鸟、测试类中定义一个makeFly()方法,让会飞的事物飞起来、
(4) 然后在main方法中创建飞机对象与鸟对象,并在main方法中调用makeFly()方法,让飞机与鸟起飞。 程序代码:
interface CanFly { ?public void fly(); }
class AirPlane implements CanFly { ?public void fly() {
??System、out、println("airplane is flying”); ?} }
class Bird implements CanFly { ?public void fly() { ?} }
class Prog1 {
?static void makeFly(CanFly obj) { ??obj、fly(); ?}
?public static void main(String[] args) {
?AirPlane ap = new AirPlane(); ??Bird b = new Bird(); ??makeFly(ap);
?System、out、println(\);