黑马程序员_继承实例,校园一卡通

Posted on 2013-02-27 16:46  我是王琦  阅读(256)  评论(0)    收藏  举报

/*

继承和多态:

 

在构造类时,如果已经存在一个类且要构造的类所有方法和属性在已存在的类中都可以找到。

那么就可以继承已经存在的类,来构造新的类,只需要写新类的一些特有方法和属性即可。

那么被继承的类就是父类,新建的类就是子类。

父类的方法和属性子类都可以使用。

继承的关键字是extends

定义一个继承类的格式如下:

class ClassA extends ClassB

{

 

}

继承可以提高代码的复用性,让类与类之间产生联系。有了这种关系才有多态的特性。

子类父类出现后,如果子类要调用父类中的成员需要用到

*/

/*

/*

继承示例:

 

举例说明:

高中时在校园里消费都要用到校园一卡通。每一个学生和老师都可以办理一张校园一卡通。

现在假设,每一张校园一卡通在发放的时候里面必须预存100块。

每一张一卡通必须写有存有持卡人的个人信息(包括姓名,性别,余额,卡号,发卡日期)且不能为空,还有消费和充值的方法

 

学校为便于管理将老师的卡和同学的卡分开。

学生的一卡通每天的最高消费额不能超过100;

老师的一卡通不没有消费限制,而且老师的一卡通可打折。

 

*/

import java.util.*;

import java.text.*;

import java.lang.*;

public class MasterCard  

{

String name;

String sex;

String date;

double money;

static int id=0;

double max;

 

MasterCard()

{

 

}

MasterCard(String name,String sex,double money)

{

 

if(money<100)

{

System.out.println("开卡最少预存100");

System.exit(0);

}

Date d=new Date();

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

this.date=sdf.format(d);

this.name=name;

this.sex=sex;

this.money=money;

this.max=0;

this.id++;

}

public String getDate()

{

return date;

}

public String getName()

{

return name;

}

public int getId()

{

return id;

}

public String getSex()

{

return sex;

}

public double getMoney()

{

return this.money;

}

public void setName(String name)

{

this.name=name;

}

public void saveMoney(int money)

{

double temp=this.money;

this.money=temp+money;

System.out.println("原有金额:"+temp+"\n"+

"充值金额:"+money+"\n"+

"充值后:"+this.money+"\n");

 

}

public void takeMoney(double money) 

{

 

if(this.money>=money)

{

 

double temp=this.money;

this.money=temp-money;

Date d=new Date();

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String taketime=sdf.format(d);

System.out.println("原有金额:"+temp+"\n"+

"消费额:"+money+"\n"+

"消费后:"+this.money+"\n"+

"消费时间:"+taketime+"\n");

}

else

{

System.out.println("余额不足,请充值!");

double temp=this.money;

money=0;

this.money=temp-money;

Date d=new Date();

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String taketime=sdf.format(d);

System.out.println("原有金额:"+temp+"\n"+

"消费额:"+money+"\n"+

"消费后:"+this.money+"\n"+

"消费时间:"+taketime+"\n");

}

 

 

 

}

 

public String toString()

{

return new String("显示一卡通信息"+"\n"+

"姓名:"+this.getName()+"\n"+

"性别:"+this.getSex()+"\n"+

"余额:"+this.getMoney()+"\n"+

"卡号:"+this.getId()+"\n"+

"发卡日期:"+this.getDate()+"\n"+

"今日消费"+this.max);

 

}

 

 

}

 

class TeacherMasterCard extends MasterCard

{

TeacherMasterCard(String name,String sex,double money)

{

super(name,sex,money);

 

}

 

public void takeMoney(double money) 

{

 

if(Calendar.HOUR_OF_DAY>0&&Calendar.HOUR_OF_DAY<11);

{

if(this.money>=money)

{

double temp=this.money;

double sale=Math.round(money*0.7);

this.money=temp-sale;

this.max=this.max+sale;

Date d=new Date();

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String taketime=sdf.format(d);

System.out.println("原有金额:"+temp+"\n"+

"原消费额"+money+"\n"+

"折后消费额:"+sale+"\n"+

"消费打折:"+"0.7"+"\n"+

"卡内余额:"+this.money+"\n"+

"消费时间:"+taketime+"\n");

}

else

{

System.out.println("余额不足,请充值");

double temp=this.money;

money=0;

this.money=temp-money;

Date d=new Date();

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String taketime=sdf.format(d);

System.out.println("原有金额:"+temp+"\n"+

"消费额:"+money+"\n"+

"卡内余额:"+this.money+"\n"+

"消费时间:"+taketime+"\n");

 

}

 

 

}

if(Calendar.HOUR_OF_DAY==00)

this.max=0;

 

}

}

 

class StudentMasterCard extends MasterCard

{

StudentMasterCard(String name,String sex,double money)

{

super(name,sex,money);

}

public void takeMoney(double money) 

{

 

 

if(Calendar.HOUR_OF_DAY>0&&Calendar.HOUR_OF_DAY<11);

{

if(this.money<money)

{

 

System.out.println("余额不足,请充值!");

double temp=this.money;

money=0;

this.money=temp-money;

Date d=new Date();

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String taketime=sdf.format(d);

System.out.println("原有金额:"+temp+"\n"+

"消费额:"+money+"\n"+

"消费后:"+this.money+"\n"+

"消费时间:"+taketime+"\n");

}

else

{

if(max<100)

{

double temp=this.money;

this.max=this.max+money;

if(!(max>100))

{

this.money=temp-money;

Date d=new Date();

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String taketime=sdf.format(d);

System.out.println("原有金额:"+temp+"\n"+

"消费额:"+money+"\n"+

"消费后:"+this.money+"\n"+

"消费时间:"+taketime+"\n");

}

else

{

this.max=max-money;

System.out.println("超支,今日还剩"+(100-max)+"元可消费"+"\n");

}

}

else

System.out.println("超支,此卡已被暂时冻结。请明日在消费"+"\n");

}

}

if(Calendar.HOUR_OF_DAY==00)

this.max=0;

 

}

}

 

class MasterCardDemo

{

public static void main(String[] args)

{

 

//studentMasterCard();

teacherMasterCard();

 

}

public static void studentMasterCard()

{

 

StudentMasterCard cd=new StudentMasterCard("帅气学生","",150);

cd.takeMoney(80);

cd.takeMoney(21);

cd.takeMoney(80);

cd.takeMoney(20);

cd.takeMoney(1);

System.out.println(cd);

}

 

public static void teacherMasterCard()

{

TeacherMasterCard ms2=new TeacherMasterCard("美女教师","",1000);

ms2.takeMoney(1001);

ms2.takeMoney(1000);

System.out.println(ms2);

}

}

 

//学生卡运行结果:

 

//教师卡运行结果:

 

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3