类中如果有抽象方法,该类必须定义为抽象类
格式:权限修饰符abstractclass类名{};范例:publicabstractclassAnimal{代码体};
父类需要定义某个方法,但是不知道如何去实现这个方法,具体的功能应该让子类去实现这样的方法就可以定义为抽象方法
格式:权限修饰符abstract返回值类型方法名(参数列表);范例:publicabstractvoidrun();//不能写私有private抽象方法,因为不能被子类进行重写
*抽象类无法创建对象*有抽象方法,这个类一定是抽象类(抽象类和抽象方法的关系)*抽象类中不一定有抽象方法*子类继承抽象类*要么重写所有抽象方法*要么子类也必须定义为抽象类//如:publicabstractclassDogextendsAnimal
●成员变量可以是变量也可以是常量●构造方法有构造方法,但是不能实例化(通过多态来进行实例化)那么,构造方法的作用是什么呢?用于子类访问父类数据的初始化●成员方法可以有抽象方法:限定子类必须完成某些动作(限定子类为抽象类或者子类要进行重写)也可以有非抽象方法:提高代码复用性(是用继承来保证的)
*抽象类:拥有所有能力,还有定义抽象方法的能力,不能创建对象*普通类:不能定义抽象方法
publicabstractclassCard{privateStringid;privatedoublebalance;publicCard(){}publicCard(Stringid,doublebalance){this.id=id;this.balance=balance;}publicabstractvoidpay(doublemoney);publicStringgetId(){returnid;}publicvoidsetId(Stringid){this.id=id;}publicdoublegetBalance(){returnbalance;}publicvoidsetBalance(doublebalance){this.balance=balance;}}
publicclassGoldenCardextendsCard{publicGoldenCard(){}publicGoldenCard(Stringid,doublebalance){super(id,balance);}@Overridepublicvoidpay(doublemoney){System.out.println("支付成功");System.out.println("原件:"+money);//打折价doublepaymoney=money*0.8;System.out.println("优惠价:"+paymoney);//余额doublenewBalance=getBalance()-paymoney;System.out.println("余额:"+newBalance);//更新余额为最新的金钱setBalance(newBalance);}}
importjava.util.Scanner;publicclassTest{publicstaticvoidmain(String[]args){GoldenCardca=newGoldenCard("vip0001",10000);Scannerrd=newScanner(System.in);System.out.println("请输入加油的金额:");doublea=rd.nextDouble();ca.pay(a);System.out.println("请输入加油的金额:");a=rd.nextDouble();ca.pay(a);}}