作者:命运之光 
专栏:Java面向对象程序设计实验报告

目录

✨一、需求设计

✨二、概要设计

✨三、详细设计

✨四、调试结果

✨五、测试结果

✨附录:源程序代码(带注释)

demo4类

Car类

Circle类

Shape类

Triangle类

Truck类

Vehicle类 


实验四 抽象类的练习

实验环境:Eclipse+JDK

实验目的:

  1. 掌握并理解面向对象的编程思想;
  2. 熟练掌握类和对象的定义及使用;
  3. 掌握抽象类的概念,特点及其使用。

实验内容:

1、编写一个程序,设计一个汽车抽象类Vehicle,包含的属性有车轮个数wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。

(1)每个类都有构造方法进行属性初始化;

(2)抽象类Vehicle类具有输出相关数据信息的抽象方法;

(3)Car,Truck子类覆写抽象类的抽象方法,并给子类分别添加一个子类特有的方法(内容自定);

(4)使用Test类中的main方法实例化Car,Truck,并输出相关信息(分别练习向上转型和向下转型)。

2、定义Shape抽象类,包含私有属性color,创建构造器为color赋值;包含计算周长的方法celPerimeter();定义子类Triangle,包含三边;定义子类Circle,包含半径radius;子类分别实现父类的计算周长功能。


以下是实验报告内容

✨✨前言:由于五一假期导致最后一节Java上机实验课没有上,所以不是很清楚实验报告的具体要求,我就按照之前数据结构实验报告的格式写了这次的Java上级报告,有需要的还是直接复制粘贴就行了,不过这次我写的比较敷衍,自己要上交实验报告的话,最好还是稍微修改美化一下🦄。

✨一、需求设计

编写一个程序,设计一个汽车抽象类Vehicle,包含的属性有车轮个数wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。

(1)每个类都有构造方法进行属性初始化;

(2)抽象类Vehicle类具有输出相关数据信息的抽象方法;

(3)Car,Truck子类覆写抽象类的抽象方法,并给子类分别添加一个子类特有的方法(内容自定);

(4)使用Test类中的main方法实例化Car,Truck,并输出相关信息(分别练习向上转型和向下转型)。

定义Shape抽象类,包含私有属性color,创建构造器为color赋值;包含计算周长的方法celPerimeter();定义子类Triangle,包含三边;定义子类Circle,包含半径radius;子类分别实现父类的计算周长功能。

✨二、概要设计

本实验设计了七个类,一个测试类demo4,一个汽车抽象类Vehicle,包含的属性有车轮个数wheels和车重weight,一个小车类Car是Vehicle的子类,其中包含的属性有载人数loader,一个卡车类Truck是Car类的子类,其中包含的属性有载重量payload。一个Shape抽象类包含私有属性color,创建构造器为color赋值;包含计算周长的方法celPerimeter();定义子类Triangle,包含三边;定义子类Circle,包含半径radius;子类分别实现父类的计算周长功能。

三、详细设计

新建一个class类类名为Vehicle,包含的属性有车轮个数wheels和车重weight。

public int wheels;//车轮个数
public double weight;//车重

写入空参和全参方法

Vehicle(){}//空参构造
Vehicle(int wheels,double weight)//全参构造
{
    this.wheels=wheels;
    this.weight=weight;
}

最后定义输出相关信息

public abstract String put();//输出相关信息

新建一个class类类名为Car是Vehicle的子类,其中包含的属性有载人数loader

public int loader;

构造Car类的无参有参两参构造。

Car(){}
Car(int loader,int wheels,double weight)
{
    super(wheels,weight);
    this.loader=loader;
}

重写put方法

public String put()
{
    System.out.println("小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人");
    return "小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人";
}

定义汽车的特有方法

public void cardemo()
{
    System.out.println("汽车的特有方法");
}

新建一个class类Truck是Car类的子类,其中包含的属性有载重量payload

public double payload;

写入空参和全参方法

Truck(){}
Truck(double payload)
{
    super();
    this.payload=payload;
}
Truck(double payload,int wheels,double weight)
{
    super(wheels,weight);
    this.payload=payload;
}

重写put方法

public String put()
{
    System.out.println("卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克");
    return "卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克";
}

新建一个class类Shape抽象类包含私有属性color,创建构造器为color赋值;

private String color;

无参有参构造

Shape(){}
Shape(String color)
{
    this.color=color;
}

setter,getter重写为color赋值。

public String setColor(String color)
{
    this.color=color;
    return this.color;
}
public String getColor()
{
    return this.color;
}

计算周长的方法。

public abstract double celPerimeter();

创建一个class类类名为Triangle是Shape的子类,三边为私有属性。

private double a;
private double b;
private double c;

无参有参构造

Circle(){}
Circle(double radius,String color)
{
    super(color);
    this.radius=radius;
}

重写celPerimeter方法

public double celPerimeter()
{
    return 2*radius*3.14;
}

创建一个class类类名为Circle是Shape的子类,私有属性为半径。

private double radius;

无参有参构造

Circle(){}
Circle(double radius,String color)
{
    super(color);
    this.radius=radius;
}

重写celPerimeter方法

public double celPerimeter()
{
    return 2*radius*3.14;
}

四、调试结果

输入第一题的测试样例为:

小车车轮数为:3;小车车重为:4.0载人数为:800人

卡车车轮数为:6;卡车车重为:1500.0卡车载重为:2000.0千克

汽车的特有方法

小车车轮数为:3;小车车重为:4.0载人数为:1000人

测试结果如图所示:

输入第二题的测试样例为:

三角形三边为6,7,8颜色为红色,圆形的半径为3颜色为蓝色。

测试结果如图所示:

  

五、测试结果

依照实验要求输入第一题样例为:

小车车轮数为:4;小车车重为:5.0载人数为:1000人

卡车车轮数为:8;卡车车重为:2000.0卡车载重为:2500.0千克

汽车的特有方法

小车车轮数为:4;小车车重为:5.0载人数为:1000人

测试结果如图所示:

依照实验要求输入第二题样例,三角形三边为3,4,5颜色为红色,圆形的半径为4颜色为蓝色。

测试结果如图所示:

附录:源程序代码(带注释)

demo4类

package 命运之光;
public class demo4 {
    public static void main(String[] args)
    {
        System.out.println("----------第一题-------------");
        Car c=new Car(1000,4,5);
        Vehicle v =new Car(1000,4,5);//向上转型
        Vehicle v11 =new Truck(2500,8,2000);
        Truck t=new Truck(2500,8,2000);
        c.put();
        t.put();
        Car v1 =(Car) v ;//向下转型
        v1.cardemo();
        v.put();
        System.out.println("----------第二题-------------");
        Triangle T=new Triangle(3,4,5,"红色");
        Circle C=new Circle(4,"蓝色");
        System.out.println("三角形周长为:"+T.celPerimeter()+"颜色为:"+T.getColor());
        System.out.println("圆形周长为:"+C.celPerimeter()+"颜色为:"+C.getColor());
    }
}

Car类

package 命运之光;
public class Car extends Vehicle {
    public int loader;
    Car(){}
    Car(int loader)
    {
        super();
        this.loader=loader;
    }
    Car(int loader,int wheels,double weight)
    {
        super(wheels,weight);
        this.loader=loader;
    }
    public String put()
    {
        System.out.println("小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人");
        return "小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人";
    }
    public void cardemo()
    {
        System.out.println("汽车的特有方法");
    }
}

Circle类

package 命运之光;
public class Circle extends Shape{
    private double radius;
    Circle(){}
    Circle(double radius,String color)
    {
        super(color);
        this.radius=radius;
    }
    public double celPerimeter()
    {
        return 2*radius*3.14;
    }
}

Shape类

package 命运之光;
public abstract class Shape {
    private String color;
    Shape(){}
    Shape(String color)
    {
        this.color=color;
    }
    public String setColor(String color)
    {
        this.color=color;
        return this.color;
    }
    public String getColor()
    {
        return this.color;
    }
    public abstract double celPerimeter();
}

Triangle类

package 命运之光;
public class Triangle extends Shape{
    private double a;
    private double b;
    private double c;
    Triangle(){}
    Triangle(double a,double b,double c,String color)
    {
        super(color);
        this.a=a;
        this.b=b;
        this.c=c;
    }
    public double celPerimeter()
    {
        return a+b+c;
    }
}

Truck类

package 命运之光;
public class Truck extends Vehicle {
    public double payload;
    Truck(){}
    Truck(double payload)
    {
        super();
        this.payload=payload;
    }
    Truck(double payload,int wheels,double weight)
    {
        super(wheels,weight);
        this.payload=payload;
    }
    public String put()
    {
        System.out.println("卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克");
        return "卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克";
    }
}

Vehicle类

package 命运之光;
public abstract class Vehicle {
    public int wheels;//车轮个数
    public double weight;//车重
    Vehicle(){}//空参构造
    Vehicle(int wheels,double weight)//全参构造
    {
        this.wheels=wheels;
        this.weight=weight;
    }
    public abstract String put();//输出相关信息
}

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐