关于1-5编程练习,作者/书名均为只读属性,我这么写总感觉怪怪的

关于1-5编程练习,作者/书名均为只读属性,我这么写总感觉怪怪的

public class Book {
  //私有属性:书名、作者、出版社、价格
    private String name;
    private String author;
    private String publisher;
    private float price;
  //通过构造方法实现属性赋值
    public String getName(String name){
        return this.name = name;
    }
    public String getAuthor(String author){
        return this.author = author;
    }
    public void setPublisher(String publisher){
        this.publisher = publisher;
    }
    public String getPublisher(){
        return this.publisher;
    }
    public void setPrice(float price){
        if(price < 10.0f){
            System.out.println("图书价格最低10元");
            this.price = 10.0f;
        }else
            this.price = price;
    }
    public float getPrice(){
        return this.price;
    }
    /*通过公有的get/set方法实现属性的访问,其中:
    1、限定图书价格必须大于10,如果无效需进行提示,并强制赋值为10
    2、限定作者、书名均为只读属性
    */
  //信息介绍方法,描述图书所有信息
    public void show(){
        System.out.println("书名:"+this.name);
        System.out.println("作者:"+this.author);
        System.out.println("出版社:"+this.publisher);
        System.out.println("价格:"+this.price+"元");
    } 
}

public class BookTest {
     // 测试方法
	 public static void main(String[] args) {
      //实例化对象,调用相关方法实现运行效果
        Book book1 = new Book();
        book1.getName("红楼梦");
        book1.getAuthor("曹雪芹");
        book1.setPublisher("人民文学出版社");
        book1.setPrice(5.0f);
        book1.show();
        System.out.println("=======================");
        Book book2 = new Book();
        book2.getName("小李飞刀");
        book2.getAuthor("古龙");
        book2.setPublisher("中国长安出版社");
        book2.setPrice(55.5f);
        book2.show();
    }
}


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

你好,你可以在Book类中创建带参构造方法,在测试类中通过带参构造方法创建对象完成属性的初始化,输出的时候,调用show方法,但是建议show方法中调用属性时使用getter方法,更加规范。祝学习愉快~

  • Ryne_Chen 提问者 #1
    我又重新贴出了更改后的代码,关于书的“price”这个参数有更好的写法吗?我这种写法只能将price单独set一下,不然不会对价格进行判断
    2017-11-02 13:05:18
  • Ryne_Chen 提问者 #2
    我知道怎么写了,在构造函数里面加个判断就行了。如下: public Book(String name,String author,String publisher,float price) { this.name = name; this.author = author; this.publisher = publisher; if(price < 10.0f){ System.out.println("图书价格最低10元"); this.price = 10.0f; }else this.price = price; }
    2017-11-02 13:09:09
提问者 Ryne_Chen 2017-11-02 13:03:23
public class Book {
  //私有属性:书名、作者、出版社、价格
    private String name;
    private String author;
    private String publisher;
    private float price;
  //通过构造方法实现属性赋值
    public Book(String name,String author,String publisher) {
    	this.name = name;
    	this.author = author;
    	this.publisher = publisher;
    }
    public String getName(){
        return this.name;
    }
    public String getAuthor(){
        return this.author;
    }
    public void setPublisher(String publisher){
        this.publisher = publisher;
    }
    public String getPublisher(){
        return this.publisher;
    }
    public void setPrice(float price){
        if(price < 10.0f){
            System.out.println("图书价格最低10元");
            this.price = 10.0f;
        }else
            this.price = price;
    }
    public float getPrice(){
        return this.price;
    }
    /*通过公有的get/set方法实现属性的访问,其中:
    1、限定图书价格必须大于10,如果无效需进行提示,并强制赋值为10
    2、限定作者、书名均为只读属性
    */
  //信息介绍方法,描述图书所有信息
    public void show(){
        System.out.println("书名:"+this.getName());
        System.out.println("作者:"+this.getAuthor());
        System.out.println("出版社:"+this.getPublisher());
        System.out.println("价格:"+this.getPrice()+"元");
    } 
}
/////////////////////////////
public class BookTest {
	// 测试方法
	public static void main(String[] args) {
		// 实例化对象,调用相关方法实现运行效果
		Book book1 = new Book("红楼梦", "曹雪芹", "人民文学出版社");
		book1.setPrice(5.0f);
		book1.show();
		System.out.println("=======================");
		Book book2 = new Book("小李飞刀", "古龙", "中国长安出版社");
		book2.setPrice(55.5f);
		book2.show();
	}
}


请你吃灌汤包 2017-11-02 09:49:28

书名和作者是只读,也就是只有get方法,没有set方法

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师