题目:
某学校举办一次活动,需要凭票参加,每张票都有票号和售价。
门票分为3类:当天票,预订票和学生预订票。
当天票价格50。
预订票,提前时间>10天的,售价30;提前10天以内的,售价40;
学生预订票,提前时间>10天的,售价15;提前10天以内的,售价20。(1)编写抽象类Ticket类,包含以下成员
①属性:
number:私有,int型,表示票号;
②方法:
- Ticket(int number), 构造方法,初始化票号;
- int getPrice(), 返回票价,抽象方法;
- String toString(),返回一个字符串,格式为“Number:票号,Price:票价”。
(2)编写Ticket类的子类WalkupTicket,表示当天票,包含以下成员
①方法:
1)WalkupTicket(int number), 构造方法,初始化票号;
2)int getPrice(), 返回票价50。(3)编写Ticket类的子类AdvanceTicket,表示预订票,包含以下成员
①属性:
- leadTime:私有,int型,表示提前预订的天数;
②方法:- AdvanceTicket(int number,int leadTime), 构造方法,初始化票号和提前天数;
- int getPrice(), 如果提前天数>10天,票价30,否则,票价40。
(4)编写AdvanceTicket类的子类StudentAdvanceTicket,表示学生预订票,包含以下成员
①属性:
height:私有,int型,表示购票学生的身高(单位厘米);
②方法:
1)StudentAdvanceTicket(int number,int leadTime,int height), 构造方法,初始化票号、提前天数和身高;
2)int getPrice(),如果学生身高>120:提前天数>10天,票价20,否则,票价30。
如果学生身高<=120,票价是身高120以上学生的对折。
题目给出裁判测试程序样例如下:
- public class Main{
- public static void main(String args[]) {
- Scanner in = new Scanner(System.in);
- Ticket a = new WalkupTicket(in.nextInt());
- System.out.println(a.toString());
- Ticket b = new AdvanceTicket(in.nextInt(), in.nextInt());
- System.out.println(b.toString());
- Ticket c = new StudentAdvanceTicket(in.nextInt(), in.nextInt(), in.nextInt());
- System.out.println(c.toString());
- }
- }
通过阅读题目,我们可以从中提炼出以下几点实现要求:
1、编写抽象类Ticket类,来初始化票号,返回票价以及返回一个字符串
2、编写Ticket类的子类WalkupTicket用于表示当天票
3、编写Ticket类的子类AdvanceTicket用于表示预定票
4、编写AdvanceTicket类的子类StudentAdvanceTicket用于表示学生预订票
代码实现如下:
- abstract class Ticket {
- private int number;
- public Ticket(int number) {
- this.number = number;
- }
-
- abstract int getPrice();
-
- public String toString() {
- return "Number:"+number+",Price:"+getPrice();
- }
- public int getNumber() {
- return number;
- }
- public void setNumber(int number) {
- this.number = number;
- }
- }
- class WalkupTicket extends Ticket {
-
- public WalkupTicket(int number) {
- super(number);
- }
-
- @Override
- int getPrice() {
- return 50;
- }
- }
- class AdvanceTicket extends Ticket {
- private int leadTime;
- public AdvanceTicket(int number,int leadTime) {
- super(number);
- this.leadTime = leadTime;
- }
-
- @Override
- int getPrice() {
- if(leadTime>10)
- return 30;
- else
- return 40;
- }
- }
- class StudentAdvanceTicket extends AdvanceTicket {
- private int height;
- int lead;
- public StudentAdvanceTicket(int number,int leadTime,int height) {
- super(number,leadTime);
- this.lead=leadTime;
- this.height = height;
- }
-
- @Override
- int getPrice() {
- if(height>120) {
- if(lead>10)
- return 20;
- else
- return 30;
- }
- else {
- if(lead>10)
- return 10;
- else
- return 15;
- }
-
- }
- }
注:编写 toString方法返回字符串时需要注意输出格式不要错误。
以上就是 PTA-6-42 设计门票(抽象类)的全部内容了,希望能对你有所帮助!