实验报告二 类和对象
一、实验目的及要求
-
实验目的:掌握使用类来封装对象的属性和行为,掌握类的定义和构造方法,使用类创建对象,掌握方法重载与多态,或者对象的组合、参数传值,或者类变量与实例变量、以及类方法与实例方法的区别等。
-
实验要求:掌握类与对象的各种基本概念,要求会定义类和创建对象,会编写程序对基本概念进行验证,确定概念理解的正确与否?对实验中出现的各种问题进行分析、总结。
-
上机实验内容:定义类和创建对象,完成方法重载操作,或者通过对象的组合、参数传值,完成具体程序功能,或者通过类与对象展示类变量与实例变量、以及类方法与实例方法之间的区别,完成实验报告。
二、实验环境
1.硬件要求:计算机一台
2.软件要求:Windows操作系统,使用Java语言,集成开发环境不限,建议使用如Eclipse、MyEclipse或IntelliJ IDEA等。
三、实验内容
-
实验方案:通过网页找寻与Java类与对象相关的题目,自己在电脑上的Idea中进行编写,最后将题目、结果和代码在实验报告中进行呈现。
-
实验步骤:
-
到网上都寻相关的题目
-
在Idea中完成题目中要求
-
查看运行结果是否符合题目要求
-
将结果和代码在实验报告中呈现
四、实验结果与分析
- 设计一个名为Person的类,包含以下属性和方法:
属性:name(姓名,字符串类型),age(年龄,整型)
构造方法:一个无参构造方法和一个带有name和age参数的构造方法
方法:introduce(自我介绍,返回一个包含姓名和年龄的字符串)
类变量:population(人口数量,整型,每创建一个Person对象,该值加1)
类方法:getPopulation(获取人口数量,返回population的值)
运行结果:
- 设计一个名为Car的类,包含以下属性和方法:
属性:brand(品牌,字符串类型),model(型号,字符串类型),engine(引擎,Engine类型,见下面的Engine类)
构造方法:一个带有brand、model和engine参数的构造方法
方法:start(启动,返回一个字符串,表示汽车启动的声音)
设计一个名为Engine的类,包含以下属性和方法:
属性:type(类型,字符串类型),horsepower(马力,整型)
构造方法:一个師有type和horsepower参数的构造方法
方法:getEngineSound(获取引擎声音,返回一个字符串,表示引擎的声音)
在Car类的start方法中,调用engine对象的getEngineSound方法,实现对象组合。
运行结果:
- 设计一个名为Circle的类,包含以下属性和方法:
属性:radius(半径,浮点型)
构造方法:一个无参构造方法和一个带有radius参数的构造方法
方法:getArea(计算面积,返回一个浮点数),getCircumference(计算周长,返回一个浮点数)
方法重载:setRadius(设置半径,接受一个浮点数参数),setRadius(设置半径,接受一个整数参数,将其转换为浮点数)
运行结果:
- 创建一个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());
}
}