现在要在原来扩展一个打折功能,虽然可以在接口新增一个方法,再在javaCourse实现即可,但不符合开闭原则(接口应该对外修改关闭,不得修改),现在可以再写一个类来继承javaCourse,扩展一个打折方法功能即可,这样就满足了开闭原则,不修改原来的接口。
示例如下:
定义一个接口:
public interface ICourse {
Integer getId();
String getName();
Double getPrice();
}
定义一个实现类javaCourse:
public class JavaCourse implements ICourse{
private Integer Id;
private String name;
private Double price;
public JavaCourse(Integer id, String name, Double price) {
this.Id = id;
this.name = name;
this.price = price;
}
public Integer getId() {
return this.Id;
}
public String getName() {
return this.name;
}
public Double getPrice() {
return this.price;
}
}
通过继承javaCourse扩展打折功能:
public class JavaDiscountCourse extends JavaCourse {
public JavaDiscountCourse(Integer id, String name, Double price) {
super(id, name, price);
}
public Double getDiscountPrice(){
return super.getPrice()*0.8;
}
}
主程序入口:
public class Test {
public static void main(String[] args) {
ICourse iCourse = new JavaDiscountCourse(96, "Java从零到企业级电商开发", 348d);
JavaDiscountCourse javaCourse = (JavaDiscountCourse) iCourse;
System.out.println("课程ID:" + javaCourse.getId() + " 课程名称:" + javaCourse.getName() + " 课程原价:" + javaCourse.getPrice() + " 课程折后价格:" + javaCourse.getDiscountPrice() + "元");
}
}
结构图: