Java任务:图书对象的完善

来自CloudWiki
跳转至: 导航搜索

任务描述:封装完善图书对象

  • 在现实中,图书一旦出版,其编号、书名、作者是不会更改的,库存不能小于0。如果允许随便修改上述属性,会导致程序错误的出现。本次任务要求使用面向对象编程的封装特性实现对属性的访问控制。

任务实现

1.在Eclipse中创建项目BookStore

2.在项目BookStore下创建包

在项目BookStore下src点击右键,分别创建包com.shangzhi.entity和包com.shangzhi.main,完成包的创建

(com.shangzhi的意思是的公司的域名shangzhi.com的倒置,entity表示装实体类的包,main表示装主类的包)

Java3-15.png

3.创建Book类和主类

在包com.shangzhi.entity和包com.shangzhi.main上点击右键,分别创建实体类Book和主类MainClass

Book类的代码如下:

package com.shangzhi.entity;

public class Book {

}

MainClass类的代码如下:

package com.shangzhi.main;

public class MainClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

4.为Book类添加成员变量

在 Book类中插入代码,增加图书编号、名称、作者、库存数量、分类、价格成员变量

public class Book {
	String bid;		//书籍编号
	String name;	//书籍名字
	String author;	//书籍作者
	int number;		//书籍库存
	String category;	//书籍详细分类(类目)
        float price;//价格
}

5.为Book类创建构造方法

因为每个类都至少有一个构造方法,所以我们需要编写它的构造方法,一个无参数的,一个有参数的:

/*
	 * 空构造函数
	 */
	public Book() {}
	
	/*
	 * 含六个参数的构造函数
	 */
	public Book(String bid, String name, String author, int number, String category,float price) {
		
		this.bid = bid;
		this.name = name;
		this.author = author;
		this.number = number;
		this.category = category;
                this.price = price;
	}

6.类成员变量的封装

通过private修饰符使成员变量变为私有,不能在类外直接访问,只能通过成员方法访问。编号、书名、作者三个成员变量只有get方法可以获取其值,没有set方法设置其值,因此保证了三个属性是只读的。setNumber方法内加了判断,不允许库存数量为负。代码如下:

public class Book {
	private String bid;		//书籍编号
	private String name;	//书籍名字
	private String author;	//书籍作者
	private int number;		//书籍库存
	private String category;	//书籍详细分类(类目)
        private float price;//价格
	
	/*
	 * 空构造函数
	 */
	public Book() {}
	
	/*
	 * 含六个参数的构造函数
	 */
	public Book(String bid, String name, String author, int number, String category,float price) {
		
		this.bid = bid;
		this.name = name;
		this.author = author;
		this.number = number;
		this.category = category;
                this.price = price;
	}
       
	/*
	 *书号、书名和作者3个变量,只能读,不能修改,因此只有读方法,没有写方法
	 */
	public String getBid() {//bid变量的读方法,
		return bid;
	}
	public String getName() {//name变量的读方法
		return name;
	}

	public String getAuthor() {//author变量的读方法
		return author;
	}
        /*
	 *库存和类别2个变量,既能读取,也能修改,因此既有读方法,也有写方法
	 */
	public int getNumber() {//number变量的读方法
		return number;
	}

	public void setNumber(int number) {//bumber变量的写方法
		if(number >= 0){
			this.number = number;
			System.out.println("图书库存设置成功,当前库存量为 "+ this.number);
		}else{
			System.out.println("图书库存设置失败,当前库存量为 "+ this.number + " 修改库存量为 " + number);
		}
	}

	public String getCategory() {
		return category;
	}
	public void setCategory(String category) {
		this.category = category;
	}
	/* 
         *toString方法:一般用于以字符串的形式返回对象的相关数据
         */
	@Override
	public String toString() {
		return "商品编号:" + this.bid + 
				" | 商品名:" + this.name + 
				" | 类目:" + this.category + 
				" | 商品总数:" + this.number;
	}
	
	
}


7. Book类对象的创建

在MainClass类中创建Book类的对象,完成对以上方法的调用

package com.shangzhi.main;
import com.shangzhi.entity.Book;
public class MainClass {

	public static void main(String[] args) {
		Book b1 = new Book("b01", "Java核心技术", 
				  "霍斯特曼", 50, "软件编程",35f);
		Book b2 = new Book("b02","三国演义","罗贯中",
				  40,"小说",45f);
		b2.setNumber(0);
		b2.setNumber(-1);
		b2.setCategory("历史名著");
		
		System.out.println("图书 b1 "+b1.toString());
		System.out.println("图书 b2 "+b2.toString());
	}
}

返回 Java程序设计