实验内容
- 编写程序为公交车的老人卡、学生卡和普通市民卡提供收费功能。将充值、收费功能提取,定义在一个接口中,然后被这三种卡类实现。最后编写一个测试类,用于测试公交车三类卡的刷卡操作。
- 题目代码:
- package 实验六1;
- public interface Buscard {
- void recharge();
- void charge();
- }
- package 实验六1;
- public class Oldcard implements Buscard{
- public void recharge() {
- System.out.println(“老年卡充值!”);
- }
- public void charge() {
- System.out.println(“老年卡,扣除2元!”);
- }
- }
- package 实验六1;
- public class OrdinaryCitizencard {
- public void recharge() {
- System.out.println(“普通市民卡充值!”);
- }
- public void charge() {
- System.out.println(“普通市民卡,扣除2元!”);
- }
- }
- package 实验六1;
- public class studentcard implements Buscard {
- public void recharge() {
- System.out.println(“学生卡充值!”);
- }
- public void charge() {
- System.out.println(“学生卡!扣除2元!”);
- }
- }
- package 实验六1;
- public class Test {
- public static void main(String[] args) {
- Oldcard Old = new Oldcard();
- Old.charge();
- Old.recharge();
- studentcard Stu = new studentcard();
- Stu.charge();
- Stu.recharge();
- OrdinaryCitizencard city = new OrdinaryCitizencard();
- city.charge();
- city.recharge();
- }
- }
- 运行结果:
- 老年卡,扣除2元!
- 老年卡充值!
- 学生卡!扣除2元!
- 学生卡充值!
- 普通市民卡,扣除2元!
- 普通市民卡充值!
2.设计四个类、一个接口,类之间的关系如下:
在类App中使用Compute、Circle、Rectangle类,在Compute类中使用Shape接口(Shape对象作为computeArea方法的形式参数),Circle、Rectangle类实现接口Shape,重写area()方法。图中“+”的表示public,“-”的表示private,框图中上面一栏是类或接口的名称,中间一栏是属性,下面一栏是方法。
在App类的main()中:
- 创建一个Compute类对象、一个Circle类对象和一个Rectangle类对象。
- 调用Compute对象的computeArea方法(实际参数为Circle对象)计算圆的面积。
- 调用Compute对象的computeArea方法(实际参数为Rectangle对象)计算矩形面积。
题目代码:
package 实验六2;
public class App {
public static void main(String[] args) {
Compute a = new Compute();
Circle b = new Circle(5);
Rectangle c = new Rectangle(4, 5);
System.out.println(“圆的面积:“+a.computeArea(b));
System.out.println(“矩形的面积:“+a.computeArea(c));
}
}
package 实验六2;
public class Circle implements Shape{
private int radus;
public Circle(int radus) {
super();
this.radus = radus;
}
public double area() {
return PI*radus*radus;
}
}
package 实验六2;
public class Compute{
public double computeArea(Shape s) {
return s.area();
}
}
package 实验六2;
public class Rectangle implements Shape{
private int width;
private int height;
public Rectangle(int width, int height) {
super();
this.width = width;
this.height = height;
}
public double area() {
return 1.0*width*height;
}
}
package 实验六2;
public interface Shape {
double PI = 3.14;
double area();
}
运行结果:
圆的面积:78.5
矩形的面积:20.0
3. 普通门和报警门。
(1)定义一个接口Alarm(报警),含有一个报警方法void alarm( );
(2)定义一个类Door(普通门),Door类有一个私有属性name(品牌);有4个公有方法getName、setName、open(开门)、close(关门);open、close方法的功能由自己确定。
(3)定义一个类AlarmDoor(报警门),继承Door类,实现接口Alarm,重写接口中的抽象方法alarm(方法的功能由自己确定)。
(3)编写一个测试类DoorTest,在main方法中,给出多种型号的报警门和普通门,调用开门、关门、报警等动作。
题目代码:
package 实验六3;
public interface Alarm{
void alarm();
}
package 实验六3;
public class AlarmDoor extends Door implements Alarm {
public String getName() {
return super.getName();
}
public void setName(String name) {
super.setName(name);
}
public void open() {
super.open();
}
public void close() {
super.close();
}
public void alarm() {
System.out.println(this.getName()+“警报响起~~~~”);
}
}
package 实验六3;
public class Door {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public void open() {
System.out.println(this.name+“开门了!“);
}
public void close() {
System.out.println(this.name+“关门了!“);
}
}
package 实验六3;
public class DoorTest {
public static void main(String[] args) {
AlarmDoor A1=new AlarmDoor();
A1.setName(“高级报警门!“);
A1.open();
A1.close();
A1.alarm();
AlarmDoor A2=new AlarmDoor();
A2.setName(“中级报警门!“);
A2.open();
A2.close();
A2.alarm();
AlarmDoor A3=new AlarmDoor();
A3.setName(“低级报警门!“);
A3.open();
A3.close();
A3.alarm();
AlarmDoor B=new AlarmDoor();
B.setName(“普通门!“);
B.open();
B.close();
}
}
运行结果:
高级报警门!开门了!
高级报警门!关门了!
高级报警门!警报响起~~~~
中级报警门!开门了!
中级报警门!关门了!
中级报警门!警报响起~~~~
低级报警门!开门了!
低级报警门!关门了!
低级报警门!警报响起~~~~
普通门!开门了!
普通门!关门了!
4. 设计五个类(测试类、计算机类、手机类、充电器类、U盘类)、一个接口(Usb接口),各类之间的关系如下:
(1)在UsbTest类的main方法中,创建一个Xiaomi手机对象、一个小米CDQ012M充电器对象、一台联想电脑、一个Kingston U盘对象。然后将充电器插入手机充电,将U盘插入计算机。
(2)在Mobile类的InsertUsb方法中,连接Usb。
(3)在Computer类的InsertUsb方法中,连接Usb。
(4)在Charger类的connect方法中,输出“已连接充电器,正在充电…”。
(5)在UDisk类的connect方法中,输出“已连接U盘器,正在读取数据…”。
题目代码:
package 实验六4;
public class Charger implements Usb {
private String brand;
public Charger(String brand) {
super();
this.brand=brand;
}
public void connect() {
System.out.println(“已连接充电器“+this.brand+“,正在充电…”);
}
}
package 实验六4;
public class Computer {
private String brand;
public Computer(String brand) {
super();
this.brand=brand;
}
public void insertUsb(Usb device) {
System.out.println(this.brand);
device.connect();
}
}
package 实验六4;
public class Mobile {
private String brand;
public Mobile(String brand) {
super();
this.brand=brand;
}
public void insertUsb(Usb device) {
System.out.println(this.brand);
device.connect();
}
}
package 实验六4;
public class UDisk implements Usb {
private String brand;
public UDisk(String brand) {
super();
this.brand=brand;
}
public void connect() {
System.out.println(“已连接U盘器“+this.brand+“,正在读取数据…”);
}
}
package 实验六4;
public interface Usb {
void connect();
}
package 实验六4;
public class UsbTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Mobile A=new Mobile(“xiaomi”);
Charger B= new Charger(“小米CDQ012M”);
Computer C=new Computer(“联想“);
UDisk D=new UDisk(“kingston”);
A.insertUsb(B);
C.insertUsb(D);
}
}
运行结果:
xiaomi
已连接充电器小米CDQ012M,正在充电…
联想
已连接U盘器kingston,正在读取数据…
5. 设计一个武器系统,要求如下:
(1)定义一个弹药类Bullet,有一个弹药名称属性name。设计一个构造方法及set、get方法。
(2)定义一个可装载弹药的接口Loadable,该接口有一个装载的抽象方法load()。
(3)定义一个可发射弹药的接口Launchable,该接口有一个发射的抽象方法launch()。
(4)定义一个武器类Weapon,既可以装弹,也可以发射。
武器类有一个属性name(武器名称)、可使用的弹药bullet(Bullet对象)以及对应的get、set方法。
重写load方法,在方法中输出装载的弹药。
重写launch方法,在方法中输出发射的弹药。
(4)定义3个普通武器类:Tank、Flighter、WarShip都继承武器类Weapon。 每个普通武器类都有一个带一个参数name的构造方法,在构造方法中创建弹药对象。
坦克Tank使用的弹药是炮弹,战斗机Flighter使用的弹药是导弹,舰艇WarShip使用的弹药是鱼雷。
(5)定义一个类Army,代表一支军队,包括:。
1) 属性:ArrayList<Weapon> weapon用来存放军队装备的各种武器,自己查找集合类ArrayList的用法和泛型的知识点;
2) 获取军队的拥有的武器数量方法getNum;
3)添置武器的方法addWeapon
4) 让所有武器都装载弹药的方法loadAll;
5)让所有武器都发起攻击的方法luanchAll。
(6)编写一个测试类,在main方法中:
1)建立一支强大的军队;
2)添置各种型号武器,包括坦克、战机、舰艇。
3)输出军队拥有的武器数量;
4)让所有的武器都装上弹药;
5)让所有的武器都发射。
程序输出例:
军队装备的武器数量:6
所有武器准备装弹药…
1:99坦克 装载炮弹
2:歼20 装载导弹
3:武汉舰 装载鱼雷
4:芜湖舰 装载鱼雷
5:歼31 装载导弹
6:F35 装载导弹
所有武器准备战斗…
1:99坦克 发射炮弹
2:歼20 发射导弹
3:武汉舰 发射鱼雷
4:芜湖舰 发射鱼雷
5:歼31 发射导弹
6:F35 发射导弹
题目代码:
package 实验六5;
import java.util.ArrayList;
public class Army {
ArrayList<Weapon> weapons = new ArrayList<Weapon>();
public int getNum() {
return weapons.size();
}
public void addWeapon(Weapon weapon) {
weapons.add(weapon);
}
public void loadAll() {
System.out.println(“所有武器准备装弹药…”);
int i = 1;
for (Weapon weapon : weapons) {
System.out.print(i+“:”+weapon.getName());
weapon.load();
i++;
}
}
public void launchAll() {
System.out.println(“所有武器准备战斗…”);
int i = 1;
for (Weapon weapon : weapons) {
System.out.print(i+“:”+weapon.getName());
weapon.launch();
i++;
}
}
}
package 实验六5;
public class Bullet {
private String name;
public Bullet(String name) {
super();
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package 实验六5;
public class Flighter extends Weapon {
public Flighter(String name) {
setName(name);
Bullet bullet=new Bullet(“导弹“);
setBullet(bullet);
}
}
package 实验六5;
public interface Launchable {
void launch();
}
package 实验六5;
public interface Loadable {
void load();
}
package 实验六5;
public class Tank extends Weapon {
public Tank(String name) {
setName(name);
Bullet bullet = new Bullet(“炮弹“);
setBullet(bullet);
}
} package 实验六5;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Tank T1 = new Tank(“99坦克 “);
Flighter F1 = new Flighter(“歼20 “);
Warship W1 = new Warship(“武汉舰 “);
Warship W2 = new Warship(“芜湖舰 “);
Flighter F2 = new Flighter(“歼31 “);
Flighter F3 = new Flighter(“F35 “);
Army A = new Army();
A.addWeapon(T1);
A.addWeapon(F1);
A.addWeapon(W1);
A.addWeapon(W2);
A.addWeapon(F2);
A.addWeapon(F3);
System.out.println(“军队装备的武器数量:“+A.getNum());
A.loadAll();
A.launchAll();
}
}
package 实验六5;
public class Warship extends Weapon{
public Warship(String name) {
setName(name);
Bullet bullet=new Bullet(“鱼雷“);
setBullet(bullet);
}
}
package 实验六5;
public class Weapon implements Launchable,Loadable{
private String name;
private Bullet bullet;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Bullet getBullet() {
return bullet;
}
public void setBullet(Bullet bullet) {
this.bullet = bullet;
}
public void load() {
System.out.println(“装载“+this.bullet.getName());
}
public void launch() {
System.out.println(“发射“+this.bullet.getName());
}
}
运行结果:
军队装备的武器数量:6
所有武器准备装弹药…
1:99坦克 装载炮弹
2:歼20 装载导弹
3:武汉舰 装载鱼雷
4:芜湖舰 装载鱼雷
5:歼31 装载导弹
6:F35 装载导弹
所有武器准备战斗…
1:99坦克 发射炮弹
2:歼20 发射导弹
3:武汉舰 发射鱼雷
4:芜湖舰 发射鱼雷
5:歼31 发射导弹
6:F35 发射导弹
6. 设计五个类,类之间的关系如下
在类App中使用Paint、Rectangle、Circle、Rabit类,在paint类中使用AsciiArt抽象类(AsciiArt对象作为setArt方法的参数),Rectangle、Circle、Rabit类继承抽象类AsciiArt,并重写draw()方法。
具体设计步骤:
- App类的main( )
1)创建一个Paint对象paint
2)显示作品列表
========作品列表=======
- 矩形
- 圆
- 小兔子
======================
请选择:
3) 根据选择,显示不同的作品
① 画矩形
a.创建一个Rectangle对象rect。
b.调用paint的setArt方法,将rect设置为paint对象要显示的作品。
c.调用对象paint的draw方法显示作品。
②画圆
a.创建一个Circle对象c。
b.调用paint的setArt方法,将c设置为paint对象要显示的作品。
c.调用对象paint的draw方法显示作品。
③画小兔子
a.创建一个Rabit对象rabit。
b.调用paint的setArt方法,将rabit设置为paint对象要显示的作品。
c.调用对象paint的draw方法显示作品。
- Paint类中的draw( )
①显示作品名、作者。
②调用成员变量art的draw方法显示作品。
- Rectangle类中的draw( )
输出width行height列个“*”。
- Circle类中的draw( )
输出用“*”组成的圆。
- Rabit类中的draw( )
输出可爱的小兔。
例:
(1)对于main()中的程序:
Rectangle rect=new Rectangle(“矩形“,“张三“,3,8);
paint.setArt(rect);
paint.draw();
输出为:
作品:矩形
作者:张三
********
********
********
(2)对于main()中的程序:
Circle c = new Circle(“圆形”, “小丫”, 4);
p.setArt(c);
p.draw();
//画圆的参考代码
void draw() {
int d=2*r; //d:直径
for(int y=0;y<=d;y++){
for(int x=0;x<=d;x++){
if((x-r)*(x-r)+(y-r)*(y-r)<=r*r) //(x,y)在园内
System.out.print(“**”);
else
System.out.print(” “);
}
System.out.println();
}
}
(3)对于main()中的程序
Rabit rabit=new Rabit(“兔子“,“李四“);
Paint.setArt(rabit);
paint.draw();
输出为:
作品:矩形
作者:张三
/ ) / )
(- -) ) o
| | | |
题目代码:
package 实验六6;
public class App {
public static void main(String[] args) {
Paint paint = new Paint();
Rectangle rect = new Rectangle(“矩形“, “张三“, 3, 8);
paint.setArt(rect);
paint.draw();
Circle c = new Circle(“圆形“, “小丫“, 4);
paint.setArt(c);
paint.draw();
Rabit rabit = new Rabit(“兔子“,“李四“);
paint.setArt(rabit);
paint.draw();
}
}
package 实验六6;
public abstract class AssciiArt {
private String title;
private String author;
public AssciiArt(String title,String author) {
super();
this.title=title;
this.author=author;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title=title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
abstract void draw();
}
package 实验六6;
public class Circle extends AssciiArt{
private int radius;
public Circle(String title, String author, int radius) {
super(title, author);
this.radius = radius;
}
void draw() {
int d=2*radius; //d:直径
for(int y=0;y<=d;y++){
for(int x=0;x<=d;x++){
if((x–radius)*(x–radius)+(y–radius)*(y–radius)<=radius*radius) //(x,y)在园内
System.out.print(“**”);
else
System.out.print(” “);
}
System.out.println();
}
}
}
package 实验六6;
public class Paint {
private AssciiArt art;
public void setArt(AssciiArt art) {
this.art = art;
}
public void draw()
{
System.out.println(“作品:“+this.art.getTitle());
System.out.println(“作者:“+this.art.getAuthor());
this.art.draw();
}
} package 实验六6;
public class Rabit extends AssciiArt{
public Rabit(String title, String author) {
super(title, author);
}
void draw() {
System.out.println(“可爱的小兔“);
}
}
package 实验六6;
public class Rectangle extends AssciiArt{
private int width;
private int height;
public Rectangle(String title, String author, int width, int height) {
super(title, author);
this.height = height;
this.width = width;
}
void draw() {
for(int i = 0;i<width;i++) {
for(int j = 0;j<height;j++) {
System.out.print(“*”);
}
System.out.println();
}
}
}
运行结果:
作品:矩形
作者:张三
********
********
********
作品:圆形
作者:小丫
**
**********
**************
**************
******************
**************
**************
**********
**
作品:兔子
作者:李四
可爱的小兔
今天的文章java继承与多态实验总结_大二java课程设计题目和代码分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/82602.html