2. 有程序定义如下,请回答问题: public class Sy12_2 { public static void main(String[] args) { Card c; c = new GoldCard("zhangsan",10000); c.pay(500); System.out.println("剩余:" + c.getMoney()); c = new SilverCard(); c.setMoney(10000); c.pay(500); System.out.println("剩余:" + c.getMoney()); } } ① 定义一个抽象类Card,包括成员变量:name、money,抽象方法void pay(double); ② 定义GoldCard子类:重写pay方法,按照原价的8折计算输出; ③ 定义SilverCard子类:重写pay方法,按照原价的8.5折计算输出。 ④ 运行程序,记录程序输出结果。 ⑤ 结合程序说明什么是多态?补充完成代码
时间: 2024-02-03 08:04:36 浏览: 21
1. 以下是代码输出结果:
剩余:9500.0
剩余:9150.0
2. 多态是面向对象编程的一个重要特性,指的是同一种类型的对象,在不同的情况下表现出不同的行为。在上述程序中,Card是一个抽象类,定义了pay方法,而GoldCard和SilverCard是Card的子类,它们都重写了pay方法,按照不同的折扣计算并输出支付金额。在main方法中,通过Card类型的引用c来分别实例化GoldCard和SilverCard对象,并调用它们的pay方法,此时c所引用的对象具有不同的行为,即表现出了多态性。
3. 补充完成的代码如下:
```
public abstract class Card {
protected String name;
protected double money;
public Card(String name, double money) {
this.name = name;
this.money = money;
}
public abstract void pay(double num);
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
public class GoldCard extends Card {
public GoldCard(String name, double money) {
super(name, money);
}
@Override
public void pay(double num) {
double payMoney = num * 0.8;
money -= payMoney;
System.out.println("原价:" + num + ",打8折后:" + payMoney + ",剩余:" + money);
}
}
public class SilverCard extends Card {
public SilverCard(String name, double money) {
super(name, money);
}
@Override
public void pay(double num) {
double payMoney = num * 0.85;
money -= payMoney;
System.out.println("原价:" + num + ",打8.5折后:" + payMoney + ",剩余:" + money);
}
}
public class Sy12_2 {
public static void main(String[] args) {
Card c;
c = new GoldCard("zhangsan", 10000);
c.pay(500);
System.out.println("剩余:" + c.getMoney());
c = new SilverCard("lisi", 10000);
c.pay(500);
System.out.println("剩余:" + c.getMoney());
}
}
```