编程题。根据“开-闭原则”设计一个Java培训课程打折的案例。 1)定义一个ICourse接口,包括一系列get方法,获取课程号id、课程名name和课程价格price; 2)定义Java 培训课程类JavaCourse,实现ICourse接口,包含属性:课程号id、课程名name 和课程价格price;在构造方法中为这些属性初始化。 3)要求既不改变原接口和Java 课程类的代码,又可以新增打折功能。定义JavaCourse类的子类JavaDiscountCourse,包含自己的构造方法,原课程打八折的方法getDiscountPrice()和获得原课程价格的方法getOrigianPrice()。 4)定义测试类Test,利用类型多态实现显示原课程课程号、名称和价格,打折后课程号、名称和价格。
时间: 2024-02-17 18:02:38 浏览: 76
下面是Java代码实现:
ICourse.java
```java
public interface ICourse {
String getId();
String getName();
double getPrice();
}
```
JavaCourse.java
```java
public class JavaCourse implements ICourse {
private String id;
private String name;
private double price;
public JavaCourse(String id, String name, double price){
this.id = id;
this.name = name;
this.price = price;
}
@Override
public String getId() {
return this.id;
}
@Override
public String getName() {
return this.name;
}
@Override
public double getPrice() {
return this.price;
}
}
```
JavaDiscountCourse.java
```java
public class JavaDiscountCourse extends JavaCourse {
public JavaDiscountCourse(String id, String name, double price) {
super(id, name, price);
}
public double getDiscountPrice() {
return super.getPrice() * 0.8;
}
public double getOrigianPrice() {
return super.getPrice();
}
}
```
Test.java
```java
public class Test {
public static void main(String[] args) {
ICourse course = new JavaCourse("001", "Java基础课程", 1000);
System.out.println("原课程:");
System.out.println("课程号:" + course.getId() + ",课程名:" + course.getName() + ",价格:" + course.getPrice());
ICourse discountCourse = new JavaDiscountCourse("002", "Java进阶课程", 2000);
System.out.println("打折后的课程:");
System.out.println("课程号:" + discountCourse.getId() + ",课程名:" + discountCourse.getName() + ",价格:" + ((JavaDiscountCourse) discountCourse).getDiscountPrice()));
}
}
```
输出结果:
```
原课程:
课程号:001,课程名:Java基础课程,价格:1000.0
打折后的课程:
课程号:002,课程名:Java进阶课程,价格:1600.0
```
这里使用了类型多态,即将JavaDiscountCourse类赋值给了ICourse类型的变量discountCourse,然后调用getDiscountPrice()方法时强制转换为JavaDiscountCourse类型。这样就实现了在不改变原接口和Java课程类的代码的情况下,新增打折功能。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)