PTA Java面向对象程序设计5接口与抽象类 R6-2 设计门票(抽象类)

题目要求:
某学校举办一次活动,需要凭票参加,每张票都有票号和售价。
门票分为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以上学生的对折。

abstract class Ticket {
    private int number;
    public Ticket(int number){
        this.number=number;
    }
    public abstract int getPrice();
    public String toString(){
        return "Number:"+this.number+",Price:"+this.getPrice();
    }
}
class WalkupTicket extends Ticket {
    public WalkupTicket(int number){
        super(number);
    }
    public int getPrice(){
        return 50;
    }
}
class AdvanceTicket extends Ticket {
    private int leadTime;
    public AdvanceTicket(int number,int leadTime){
        super(number);
        this.leadTime=leadTime;
    }
    public int getPrice(){
        if(leadTime>10)
            return 30;
        else
            return 40;
    }

    public int getLeadTime(){
        return this.leadTime;
    }
    public void setLeadTime(int leadTime){
        this.leadTime=leadTime;
    }
}
class StudentAdvanceTicket extends AdvanceTicket {
    private int height;
    public StudentAdvanceTicket(int number,int leadTime,int height){
        super(number,leadTime);
        this.height=height;
    }
    public int getPrice(){
        if(height>120){
            if(this.getLeadTime()>10)
                return 20;
            else
                return 30;
        }
        else{
            if(this.getLeadTime()>10)
                return 10;
            else
                return 15;
        }
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值