“Java 语言程序设计实验 2023秋季”实验报告二 类和对象

实验报告二 类和对象

一、实验目的及要求

  1. 实验目的:掌握使用类来封装对象的属性和行为,掌握类的定义和构造方法,使用类创建对象,掌握方法重载与多态,或者对象的组合、参数传值,或者类变量与实例变量、以及类方法与实例方法的区别等。

  2. 实验要求:掌握类与对象的各种基本概念,要求会定义类和创建对象,会编写程序对基本概念进行验证,确定概念理解的正确与否?对实验中出现的各种问题进行分析、总结。

  3. 上机实验内容:定义类和创建对象,完成方法重载操作,或者通过对象的组合、参数传值,完成具体程序功能,或者通过类与对象展示类变量与实例变量、以及类方法与实例方法之间的区别,完成实验报告。

二、实验环境

1.硬件要求:计算机一台

2.软件要求:Windows操作系统,使用Java语言,集成开发环境不限,建议使用如Eclipse、MyEclipse或IntelliJ IDEA等。

三、实验内容

  1. 实验方案:通过网页找寻与Java类与对象相关的题目,自己在电脑上的Idea中进行编写,最后将题目、结果和代码在实验报告中进行呈现。

  2. 实验步骤:

  • 到网上都寻相关的题目

  • 在Idea中完成题目中要求

  • 查看运行结果是否符合题目要求

  • 将结果和代码在实验报告中呈现

四、实验结果与分析

  1. 设计一个名为Person的类,包含以下属性和方法:
    属性:name(姓名,字符串类型),age(年龄,整型)
    构造方法:一个无参构造方法和一个带有name和age参数的构造方法
    方法:introduce(自我介绍,返回一个包含姓名和年龄的字符串)
    类变量:population(人口数量,整型,每创建一个Person对象,该值加1)
    类方法:getPopulation(获取人口数量,返回population的值)

运行结果:
图片描述

  1. 设计一个名为Car的类,包含以下属性和方法:
    属性:brand(品牌,字符串类型),model(型号,字符串类型),engine(引擎,Engine类型,见下面的Engine类)
    构造方法:一个带有brand、model和engine参数的构造方法
    方法:start(启动,返回一个字符串,表示汽车启动的声音)
    设计一个名为Engine的类,包含以下属性和方法:
    属性:type(类型,字符串类型),horsepower(马力,整型)
    构造方法:一个師有type和horsepower参数的构造方法
    方法:getEngineSound(获取引擎声音,返回一个字符串,表示引擎的声音)
    在Car类的start方法中,调用engine对象的getEngineSound方法,实现对象组合。

运行结果:
图片描述

  1. 设计一个名为Circle的类,包含以下属性和方法:
    属性:radius(半径,浮点型)
    构造方法:一个无参构造方法和一个带有radius参数的构造方法
    方法:getArea(计算面积,返回一个浮点数),getCircumference(计算周长,返回一个浮点数)
    方法重载:setRadius(设置半径,接受一个浮点数参数),setRadius(设置半径,接受一个整数参数,将其转换为浮点数)

运行结果:
图片描述

  1. 创建一个Book类,包含以下属性和方法:
    属性:title(书名,字符串类型),author(作者,字符串类型),price(价格,浮点型),stock(库存,整数类型)
    构造方法:一个无参构造方法和一个带有title、author、price和stock参数的构造方法
    方法:getInfo(返回书籍信息,字符串类型),sell(卖出一本书,减少库存,返回布尔值)
    类变量:totalBooks(记录所有书籍的总数,整数类型)
    类方法:getTotalBooks(获取所有书籍的总数,返回整数)

运行结果:
图片描述

##五、附源程序
1.

  • Person.java
public class Person {
    private String name;
    private int age;
    private static int population = 0;
    // 无参构造方法
    Person() {
        this.name = "";
        this.age = 0;
        population++;
    }
    // 带有name和age参数的构造方法
    Person(String name, int age) {
        this.name = name;
        this.age = age;
        population++;
    }
    // 自我介绍方法
    public String introduce() {
        return "我的名字是" + name + ",我今年" + age + "岁。";
    }
    // 获取人口数量的类方法
    public static int getPopulation() {
        return population;
    }
}

  • Main.java
public class Main{
    public static void main(String args[]){
// 创建Person对象
        Person person1 = new Person("董斌", 19);
        Person person2 = new Person("邢亚龙", 18);
// 调用introduce方法
        System.out.println(person1.introduce());
        System.out.println(person2.introduce());
// 调用类方法getPopulation
        System.out.println("人口数量是: " + Person.getPopulation());
    }
}
  • Engine.java
public class Engine {
    private String type;
    private int horsepower;
    // 带有type和horsepower参数的构造方法
    public Engine(String type, int horsepower) {
        this.type = type;
        this.horsepower = horsepower;
    }
    // 获取引擎声音的方法
    public String getEngineSound() {
        return "引擎的声音是 " + type + " 类型,马力为 " + horsepower;
    }
}

  • Car.java
public class Car {
    private String brand;
    private String model;
    private Engine engine;
    // 带有brand、model和engine参数的构造方法
    public Car(String brand, String model, Engine engine) {
        this.brand = brand;
        this.model = model;
        this.engine = engine;
    }
    // 启动方法
    public String start() {
        return "这辆" + brand + " " + model + "的启动声音是 " + engine.getEngineSound();
    }
}
  • Main.java
public class Main {
    public static void main(String[] args) {
        // 创建Engine对象
        Engine engine1 = new Engine("V6", 300);
        Engine engine2 = new Engine("V8", 400);
        // 创建Car对象
        Car car1 = new Car("Toyota", "Camry", engine1);
        Car car2 = new Car("Ford", "Mustang", engine2);
        // 调用start方法
        System.out.println(car1.start());
        System.out.println(car2.start());
    }
}


  • Circle.java
public class Circle {
    private double radius;
    // 无参构造方法
    public Circle() {
        this.radius = 0.0;
    }
    // 带有radius参数的构造方法
    public Circle(double radius) {
        this.radius = radius;
    }
    // 计算面积的方法
    public double getArea() {
        return Math.PI * Math.pow(this.radius, 2);
    }
    // 计算周长的方法
    public double getCircumference() {
        return 2 * Math.PI * this.radius;
    }
    // 设置半径的方法(接受浮点数)
    public void setRadius(double radius) {
        this.radius = radius;
    }
    // 设置半径的方法(接受整数)
    public void setRadius(int radius) {
        this.radius = (double) radius;
    }
}

  • Main.java
public class Main {
    public static void main(String[] args) {
        // 创建一个半径为5的Circle对象
        Circle circle = new Circle(5);
        // 计算面积
        double area = circle.getArea();
        System.out.println("面积: " + area);
        // 计算周长
        double circumference = circle.getCircumference();
        System.out.println("周长: " + circumference);
        // 使用整数设置半径
        circle.setRadius(10);
        // 重新计算面积和周长
        area = circle.getArea();
        System.out.println("新面积: " + area);
        circumference = circle.getCircumference();
        System.out.println("新周长: " + circumference);
    }
}
  • Book.java
public class Book {
  private String title; // 书名
  private String author; // 作者
  private double price; // 价格
  private int stock; // 库存
  private static int totalBooks = 0; // 总书籍数量
  // 默认构造函数
  public Book() {
    totalBooks++;
  }
  // 带参数的构造函数
  public Book(String title, String author, double price, int stock) {
    this.title = title;
    this.author = author;
    this.price = price;
    this.stock = stock;
    totalBooks++;
  }
  // 获取书籍信息的方法
  public String getInfo() {
    return "书名: " + title + ", 作者: " + author + ", 价格: " + price + ", 库存: " + stock;
  }
  // 出售书籍的方法
  public boolean sell() {
    // 如果库存大于0,减少库存并返回true
    if(stock > 0) {
      stock--;
      return true;
    }
    // 如果库存为0,返回false
    return false;
  }
  // 获取总书籍数量的静态方法
  public static int getTotalBooks() {
    return totalBooks;
  }
}


  • BookStore.java
public class BookStore {
  private String name; // 书店名称
  private Book[] books; // 存储书籍的数组
  private int bookCount; // 当前书籍数量
  // 默认构造函数
  public BookStore() {
    this.books = new Book[10];
    this.bookCount = 0;
  }
  // 带名称参数的构造函数
  public BookStore(String name) {
    this.name = name;
    this.books = new Book[10];
    this.bookCount = 0;
  }
  // 添加书籍的方法
  public void addBook(Book book) {
    // 如果当前书籍数量已达到数组容量,扩大数组容量
    if(bookCount >= books.length) {
      Book[] newBooks = new Book[books.length * 2];
      System.arraycopy(books, 0, newBooks, 0, books.length);
      books = newBooks;
    }
    // 将书籍添加到数组并更新书籍数量
    books[bookCount++] = book;
  }
  // 根据书名查找书籍的方法
  public Book findBookByTitle(String title) {
    for(int i = 0; i < bookCount; i++) {
      // 如果书籍信息包含指定书名,返回该书籍对象
      if(books[i].getInfo().contains(title)) {
        return books[i];
      }
    }
    // 如果未找到书籍,返回null
    return null;
  }
  // 出售书籍的方法
  public boolean sellBook(String title) {
    // 根据书名查找书籍
    Book book = findBookByTitle(title);
    // 如果找到书籍,尝试出售并返回结果
    if(book != null) {
      return book.sell();
    }
    // 如果未找到书籍,返回false
    return false;
  }
}

  • Main.java
public class Main {
  public static void main(String[] args) {
    // 创建一个名为"我的书店"的BookStore对象
    BookStore store = new BookStore("我的书店");
    // 创建两本书的Book对象
    Book book1 = new Book("Java入门", "张三", 59.9, 10);
    Book book2 = new Book("Python编程", "李四", 79.9, 5);
    // 将两本书添加到书店
    store.addBook(book1);
    store.addBook(book2);
    // 根据书名查找书籍
    String title = "Java入门";
    Book foundBook = store.findBookByTitle(title);
    // 如果找到了书籍,输出书籍信息
    if (foundBook != null) {
      System.out.println("找到书籍: " + foundBook.getInfo());
    } else {
      System.out.println("未找到书籍: " + title);
    }
    // 尝试卖出一本书
    if (store.sellBook("Java入门")) {
      System.out.println("成功卖出一本书: " + title);
    } else {
      System.out.println("卖书失败: " + title);
    }
    // 输出所有书籍的总数
    System.out.println("所有书籍总数: " + Book.getTotalBooks());
  }
}
  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值