基本描述
需求变更:
假设书店原有4大名著,现在按照9折销售图书,请打印输出打折前后的图书信息。
遵照“开闭原则”中对修改关闭的原则,不能直接修改IBook接口和NovelBook 类,而是通过增加一个子类OffNovelBook来完成 。
代码实现
项目结构
运行截图
代码
/*
书的接口
*/
public interface IBook{
public String getName();
public double getPrice();
public String getAuthor();
}
/**
* 一个书的实现类(小说)
*/
public class NovelBook implements IBook{
private String name;
private Double price;
private String author;
public NovelBook(String name,double price,String author){
this.name = name;
this.price = price;
this.author = author;
}
public String getName(){
return this.name;
}
public double getPrice(){
return this.price;
}
public String getAuthor() {
return this.author;
}
}
/**
* 重写里面的getPrice方法
*/
public class OffNovelBook extends NovelBook{
private double price;
public OffNovelBook(String name,Double price,String author){
super(name,price,author);
this.price = price;
}
//覆写价格方法,当价格大于40,就打8析,其他价格就打95析
public double getPrice(){
if(this.price > 50){
return this.price * 0.85;
}else{
return this.price * 0.95;
}
}
}
public class Main {
public static void main(String[] args){
IBook novel1 = new NovelBook("西游记",30,"吴承恩");
IBook novel2 = new NovelBook("红楼梦",40,"曹雪芹");
IBook novel3 = new NovelBook("三国演义",50,"罗贯中");
IBook novel4 = new NovelBook("水浒传",60,"施耐庵");
System.out.println("书籍名字:"+novel1.getName()+"书籍作者:"+novel1.getAuthor()+"书籍价格:"+novel1.getPrice());
System.out.println("书籍名字:"+novel2.getName()+"书籍作者:"+novel2.getAuthor()+"书籍价格:"+novel2.getPrice());
System.out.println("书籍名字:"+novel3.getName()+"书籍作者:"+novel3.getAuthor()+"书籍价格:"+novel3.getPrice());
System.out.println("书籍名字:"+novel4.getName()+"书籍作者:"+novel4.getAuthor()+"书籍价格:"+novel4.getPrice());
System.out.println("---------以下为打折后----------");
OffNovelBook offNovelBook1 = new OffNovelBook("西游记",30.0,"吴承恩");
OffNovelBook offNovelBook2 = new OffNovelBook("红楼梦",40.0,"曹雪芹");
OffNovelBook offNovelBook3 = new OffNovelBook("三国演义",50.0,"罗贯中");
OffNovelBook offNovelBook4 = new OffNovelBook("水浒传",60.0,"施耐庵");
System.out.println("书籍名字:"+offNovelBook1.getName()+"书籍作者:"+offNovelBook1.getAuthor()+"书籍价格:"+offNovelBook1.getPrice());
System.out.println("书籍名字:"+offNovelBook2.getName()+"书籍作者:"+offNovelBook2.getAuthor()+"书籍价格:"+offNovelBook2.getPrice());
System.out.println("书籍名字:"+offNovelBook3.getName()+"书籍作者:"+offNovelBook3.getAuthor()+"书籍价格:"+offNovelBook3.getPrice());
System.out.println("书籍名字:"+offNovelBook4.getName()+"书籍作者:"+offNovelBook4.getAuthor()+"书籍价格:"+offNovelBook4.getPrice());
}
}