Java任务:图书对象的完善
来自CloudWiki
目录
任务描述:封装完善图书对象
- 在现实中,图书一旦出版,其编号、书名、作者是不会更改的,库存不能小于0。如果允许随便修改上述属性,会导致程序错误的出现。本次任务要求使用面向对象编程的封装特性实现对属性的访问控制。
任务实现
1.在Eclipse中创建项目BookStore
2.在项目BookStore下创建包
在项目BookStore下src点击右键,分别创建包com.shangzhi.entity和包com.shangzhi.main,完成包的创建
(com.shangzhi的意思是的公司的域名shangzhi.com的倒置,entity表示装实体类的包,main表示装主类的包)
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程序设计