面向对象编程(四)
【上机目的】
1) 理解接口和抽象类的概念 2) 掌握接口中使用多态的原理 3) 掌握内部类 4) 掌握匿名类 5) 掌握final关键字 【上机环境】 JDK1.8+UltraEdit 【上机准备】
1) 复习课件中理论知识 2) 练习课堂所讲的例子 【上机内容】
一、抽象类和final关键字
1. 定义一个抽象类VolumeArea
? 所包含的属性:PI 定义为常量 ? 包含两个抽象方法:
floatvolume(double r)计算体积 float area(double r)计算面积
2. 自定义类VolumeAndArea,继承自VolumeArea,实现父类的抽象方法 其中体积公式为:??×??????÷?? 3. 自定义测试类Test,进行测试。
二、利用抽象类实现多媒体处理(必做)
定义Media抽象类,在Media类中定义抽象方法viewMedia()。由Media派生出Music、Movie和Ebook子类。使这些子类覆盖(重写)viewMedia()方法。 1、新建Media项目
2、在项目中新建Media抽象类,位于base.abs包中
Media抽象类的抽象方法:
①public abstract void viewMedia();本抽象方法实现多媒体处理 3、在项目中新建Music类,位于base.abs包中,继承Media类
Music类的方法:
①public void viewMedia() 本方法实现音乐处理(重写父类方法) 4、在项目中新建Movie类,位于base.abs包中,继承Media类
Moviec类的方法:
①public void viewMedia() 本方法实现电影处理(重写父类方法) 5、在项目中新建Ebook类,位于base.abs包中,继承Media类
Ebook类的方法:
①public void viewMedia() 本方法实现电子书处理(重写父类方法) 6、在项目中新建Test类,位于base.abs包中
在main()方法中完成以下操作:
(1)创建一个Movie类对象,调用对象的viewMedia()方法,实现电影媒体处理;
(2)创建一个Music类对象,调用对象的viewMusic()方法,实现音乐媒体处理;
(3)创建一个Ebook类对象,调用对象的viewEbook()方法,实现电子书处理。
三、利用接口技术实现几何图形运算(必做)
在几何图形中,按图形的几何维数分为平面图和立体图。所有的平面图都能计算周长和面积,所有的立体图都能计算表面积和体积。定义Shape2D和Shape3D接口,分别描述平面图和立体图的特征和行为,在Shape2D中定义计算周长和面积的方法,Shape3D继承Shape2D接口,新增计算体积方法。定义Circle圆类和Sphere球类,分别实现Shape2D和Shape3D接口。
1、新建Graph项目
2、在项目中新建IShape2D接口,位于base.inter包中
IShape2D接口的抽象方法:
①public double computePerimeter(); 本方法计算周长 ②double computeArea(); 本方法计算面积
3、在项目中新建IShape3D接口,位于base.inter包中,继承IShape2D接口
IShape3D接口的抽象方法:
①double computeVolume();本方法计算体积 4、在项目中新建IScalable接口,位于base.inter包中
IScalable接口的抽象方法:
①void scale(double factor);本方法缩放图形
5、在项目中新建Circle类,位于base.inter包中,实现接口IShape2D,IScalable
(1)Circle类的属性:protected double radius; (2)Circle类的方法
①public Circle ()本构造方法用来构建空的圆对象 ②public Circle(double radius)
本构造方法在创建圆对象的同时给对象的属性赋值。 ③public double getRadius()本方法获取对象的半径
④public void setRadius(double radius)本方法设置对象的半径
⑤public double computePerimeter()本方法返回对象的周长(实现接口方法)
⑥public double computeArea()本方法返回对象的面积(实现接口方法) ⑦public void scale(double factor)本方法按factor值缩放圆半径(实现接
口方法)
6、在项目中新建Sphere类,位于base.inter包中,继承Circle类,实现接
口IShape3D,IScalable (1)Sphere类的方法
①public Sphere()本构造方法用来构建空的球对象 ②public Sphere (double radius)
本构造方法负责将参数传递给父类构造方法。
③public double computeVolume()本方法返回球对象的体积(实现接口方法)
④public double computeArea()本方法返回球对象的表面积(重写父类方法)
⑤public void scale(double factor)本方法按factor值缩放球半径(实现接
口方法)
7、在项目中新建Test类,位于base.inter包中
在main()方法中完成以下操作:
(1)定义double变量factor,表示图形的缩放系数,初值自定;
(2)创建一个Circle类对象,调用带参构造方法实例化对象,调用对象的相关方法,输出圆对象的原半径值、周长、面积、缩放后的半径值; (3)创建一个Sphere类对象,调用带参构造方法实例化对象,调用对象的相关方法,输出球对象的原半径值、面积、体积、缩放后的半径值。
多态本质:父类引用可也指向不同的子类实例,父类调用不同子类重写的方
法可实现不同功能! 注意:父类只能调用父类与子类共有的方法,不能调用父类没有子类没有的方法!即子类向上转型为父类后,会损失很多子类新的特色。
四、利用接口技术实现计算器功能(多态)
1. 定义一个接口Compute
? 所包含的行为:public double computer(doublen,double m) 2. 自定义类Plus,实现Compute接口 3. 自定义类Minus,实现Compute接口 4. 自定义类Multiply,实现Compute接口 5. 自定义类Divide,实现Compute接口 6. 自定义测试类UseCompute,进行测试。
? 所包含的行为:public void useCompute(Compute com, int one, int two)