JAVA实验报告实验六 接口和继承

实验目的

1. 掌握接口的使用方法。

2. 掌握子类的继承性、子类对象的创建过程。

3. 掌握成员变量的继承与隐藏、方法的继承与重写。

实验学时 6学时

实验内容

1. 编写程序为公交车的老人卡、学生卡和普通市民卡提供收费功能,将充值、收费功能提取,以接口的形式定义,然后被这三种卡类实现。最后编写一个测试类,用于测试公交车三类卡的刷卡操作。

 interface Buscard { 
void recharge();

void charge();

}

 class Oldpeople implements Buscard {  
public void recharge() {

System.out.println("老年卡充值成功!"); 
}

public void charge() {

System.out.println("使用老年卡,扣一元!"); 
}

}

 class People implements Buscard {  

public void recharge() {

System.out.println("普通市民卡充值成功!");  

}

public void charge() {

System.out.println("使用普通市民卡,扣2元!");  

}

}

class Student implements Buscard {  

public void recharge() {

System.out.println("学生卡充值成功!");  

}

public void charge() {

System.out.println("使用学生卡,扣1.5元!"); 
}

}

 class Test {

public static void main(String[] args) {



Oldpeople O = new Oldpeople();

O.recharge();

O.charge();  

Student S = new Student();

S.recharge();

S.charge(); 

People P = new People();

P.recharge();

P.charge();  

}

}

2.设计四个类、一个接口,在类App中使用Compute、Circle、Rectangle类,在Compute类中使用Shape接口(Shape对象作为computeArea方法的形式参数),Circle、Rectangle类实现接口Shape,重写area()方法。图中“+”的表示public,“-”的表示private,框图中上面一栏是类或接口的名称,中间一栏是属性,下面一栏是方法。

在App类的main()中:

  1. 创建一个Compute类对象、一个Circle类对象和一个Rectangle类对象。
  2. 调用Compute对象的computeArea方法(实际参数为Circle对象)计算圆的面积。
  3. 调用Compute对象的computeArea方法(实际参数为Rectangle对象)计算矩形面积。
     class App {
    
    public static void main(String[] args) {
    
    
    Compute a = new Compute();
    
    Circle b = new Circle(2);
    
    Rectangle c = new Rectangle(2,2);
    
    System.out.println("圆的面积为:"+a.computArea(b));  
    
    System.out.println("矩形面积为:"+a.computArea(c));  
    
    }
    
    }
     class Circle implements Shape {  
    
    private int radius;
    
    public Circle(int radius) {
    
    this.radius=radius;
    
    }
    
    public double area() {
    
    return PI*radius*radius; 
    
    }
    
    }
    
     class Compute {
    
    public double computArea(Shape s) {  
    
    return s.area();
    
    }
    
    }
    
     class Rectangle implements Shape { 
    
    private int width;
    
    private int height;
    
    public Rectangle(int width,int height) {
    
    this.width=width;
    
    this.height=height;
    
    }
    
    public double area() {
    
    return width*height;  
    
    }
    
    }
    
    
     interface Shape {  
    
    double PI=3.14;
    
    double area();
    
    }

    3. 普通门和报警门。

    (1)定义一个接口Alarm(报警),含有一个报警方法void alarm( );

    (2)定义一个类Door(普通门),Door类有一个私有属性name(品牌);有4个公有方法getName、setName、open(开门)、close(关门);open、close方法的功能由自己确定。

    (3)定义一个类AlarmDoor(报警门),继承Door类,实现接口Alarm,重写接口中的抽象方法alarm(方法的功能由自己确定)。

    (4)编写一个测试类DoorTest,在main方法中,给出多种型号的报警门和普通门,调用开门、关门、报警等动作。

     interface Alarm {  
    
    void alarm();
    
    }
    
     class AlarmDoor extends Door implements Alarm {  
    public void alarm() {
    
    System.out.println(this.getName()+"嘟嘟嘟!警报响起!");  
    }
    
    }
    
     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+"门关了!");
    
    }
    
    }
    
    
     class DoorTest {
    
    public static void main(String[] args) {
    
    
    
    AlarmDoor a1 = new AlarmDoor();
    
    a1.setName("低级报警门!");
    
    a1.open();
    
    a1.alarm();  
    AlarmDoor a2 = new AlarmDoor();
    
    a2.setName("高级报警门!!!");
    
    a2.open();
    
    a2.close();
    
    a2.alarm();  
    
    AlarmDoor a3 = new AlarmDoor();
    
    a3.setName("普通门.");
    
    a3.open();
    
    a3.close();  
    
    }
    
    }

    4. 设计五个类(测试类、计算机类、手机类、充电器类、U盘类)、一个接口(Usb接口),(1)在UsbTest类的main方法中,创建一个Xiaomi手机对象、一个小米CDQ012M充电器对象、一台联想电脑、一个Kingston U盘对象。然后将充电器插入手机充电,将U盘插入计算机。

    (2)在Mobile类的InsertUsb方法中,连接Usb。

    (3)在Computer类的InsertUsb方法中,连接Usb。

    (4)在Charger类的connect方法中,输出“已连接充电器,正在充电...”。

    (5)在Usb类的connect方法中,输出“已连接U盘器,正在读取数据...”。

    class Charger implements Usb {
    
    private String brand;
    
    public Charger(String brand) {
    
    this.brand=brand;
    
    }
    
    public void connect() {
    
    System.out.println("已连接充电器"+this.brand+",正在充电...");  
    }
    
    }
    
     class Computer {
    
    private String brand;
    
    public Computer(String brand) {
    
    this.brand=brand;
    
    }
    
    public void insertUsb(Usb device) {
    
    System.out.println(this.brand);
    
    device.connect(); 
    }
    
    }
    
    class Moblie {
    
    private String brand;
    
    public void Moblie(String brand) {
    
    this.brand=brand;
    
    }
    
    public void insertUsb(Usb device) {
    
    System.out.println(this.brand);
    
    device.connect(); 
    }
    
    }
    
     class UDisk implements Usb {
    
    private String brand;
    
    public UDisk(String brand) {
    
    this.brand=brand;
    
    }
    
    public void connect() {
    
    System.out.println("已连接U盘器"+this.brand+",正在读取数据...");  
    }
    
    }
     interface Usb { 
    
    void connect();
    
    }
    
    
     class UsbTest {
    
    public static void main(String[] args) {
    
    
    
    Moblie a = new Moblie();
    
    a.Moblie("Xiaomi"); 
    
    Charger b = new Charger("小米CDQ012M");  
    
    Computer c = new Computer("联想");  
    
    UDisk d = new UDisk("Kingston");  
    
    a.insertUsb(b);  
    
    c.insertUsb(d);  
    
    }
    
    }

    5. 设计一个武器系统,要求如下:

    (1)定义一个弹药类Bullet,有一个弹药名称属性name。设计一个构造方法及set、get方法。

    (2)定义一个可装载弹药的接口Loadable,该接口有一个装载的抽象方法load()。

    (3)定义一个可发射弹药的接口Launchable,该接口有一个发射的抽象方法launch()。

    (4)定义一个武器类Weapon,实现接口Loadable、Launchable(既可以装弹,也可以发射)。

    武器类有属性:String name(武器名称)、Bullet bullet(可使用的弹药)

    以及对应的get、set方法。

    重写load方法,在方法中输出装载的弹药。

    重写launch方法,在方法中输出发射的弹药。

    (5)定义3个普通武器类:Tank、Flighter、WarShip都继承武器类Weapon。 每个普通武器类都有一个带一个参数name的构造方法,在构造方法中创建弹药对象。

    坦克Tank使用的弹药是炮弹,战斗机Flighter使用的弹药是导弹,舰艇WarShip使用的弹药是鱼雷。

    (6)定义一个类Army,代表一支军队,包括:。

    1) 属性:ArrayList<Weapon> weapon(用来存放军队装备的各种武器);

    2) 获取军队的拥有的武器数量方法getNum;

    3)添置武器的方法addWeapon

    4) 让所有武器都装载弹药的方法loadAll;

    5)让所有武器都发起攻击的方法luanchAll。

    (7)编写一个测试类,在main方法中:

    1)建立一支强大的军队;

    2)添置各种型号武器,包括坦克、战机、舰艇。

    3)输出军队拥有的武器数量;

    4)让所有的武器都装上弹药;

    5)让所有的武器都发射。

    import java.util.Scanner;
    
     class App {
    
    public static void main(String[] args) {
    
    
    
    Scanner in=new Scanner(System.in);
    
    System.out.println("========作品列表=======");
    
    System.out.println("1.矩形");
    
    System.out.println("2.圆");
    
    System.out.println("3.小兔子");
    
    System.out.println("======================");
    
    System.out.println("请选择:");
    
    int select=in.nextInt();
    
    Paint paint = new Paint();
    
    switch(select){  
    
    case 1:
    
    Rectangle rect = new Rectangle("矩形","张三",3,8);
    
    paint.setArt(rect);  
    paint.draw();  
    break;
    
    case 2:
    
    Circle c = new Circle("圆形","小丫",4);
    
    paint.setArt(c);  
    paint.draw();  
    
    break;
    
    case 3:
    
    Rabit rabit = new Rabit("兔子","李四");
    
    paint.setArt(rabit);  
    paint.draw(); 
    
    break;
    
    }
    
    }
    
    }
    
     abstract class AssciiArt {  
    
    private String title;  
    
    private String author; 
    
    public AssciiArt(String title,String author) {
    
    this.title=title;
    
    this.author=author;
    
    }
    
    abstract void draw();  
    
    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;
    
    }
    
    }
    
     class Circle extends AssciiArt { 
    
    private int radius;
    
    public Circle(String title,String author,int radius) {
    
    super(title,author);  
    this.radius=radius;
    
    }
    
    public void draw() { 
    
    int d=2*radius;
    
    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)
    
    System.out.print("**");
    
    else
    
    System.out.print("  ");
    
    }
    
    System.out.println();  
    }
    
    }
    
    }
    
    
     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(); 
    
    }
    
    }
    
    
    
     class Rabit extends AssciiArt { 
    
    public Rabit(String title,String author) {
    
    super(title,author); 
    
    }
    
    public void draw() { 
    
    System.out.println("/)/)");
    
    System.out.println("(- -) )o");
    
    System.out.println("  || ||");  
    
    }
    
    }
    
     class Rectangle extends AssciiArt { 
    
    private int width;
    
    private int height;
    
    public Rectangle(String title,String author,int width,int height) {
    
    super(title,author);  
    
    this.width=width;
    
    this.height=height;
    
    }
    
    public void draw() { 
    
    for(int a=0;a<width;a++) {
    
    for(int b=0;b<height;b++) {
    
    System.out.print("*");  
    
    }
    
    System.out.println();
    
    }
    
    }
    
    }

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值