1、抽象类和抽象方法一、定义:java中可以定义的一些不含方法体的方法,它的方法体的实现交给该类的子类根据自己的情况去实现,这就是抽象方法。包含抽象方法的类就叫做抽象类。一个抽象类可以有一个或多个抽象方法。二、抽象规则:1、 抽象类和方法必须用abstract 来修饰;2、 抽象类不能被实例化;3、抽象方法只需声明,无需实现,抽象方法一定调用子类重写后的非抽象的方法;4、抽象类有构造但不能被调用;5、含有抽象方法的类必须声明为抽象类,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个类还是个抽象类。注意:抽象方法不能为private的,因为抽象方法没有具体实现,需要在子类中继承并重写来实现
2、具体实现。抽象方法必须重写实现其具体的功能。【TestAbstract.java】package day7am;public abstract class TestAbstract public abstract void test();/含有抽象方法的类一定是抽象类。public static void main(String args) 三、抽象方法的继承与实现当某类继承抽象类时,如果其本身不是抽象类时,则必须实现所继承抽象类中的抽象方法。如,具有启动(startup)方法的抽象车辆类Car,其每中子类都必须实现其自己的、专属于某种类型车辆的具体启动(startup)方法,下边例子就说明了
3、。【TestAbstract.java】package Pra;/定义抽象类Carabstract class Car /定义抽象方法startUppublic abstract void startUp();/定义抽象类Audi并使该类继承自 Carabstract class Audi extends Car/定义抽象方法turbopublic abstract void turbo();/定义非抽象类Audi_A6继承自Audiclass Audi_A6 extends Audi/实现startUp方法public void startUp()System.out.println(“调用
4、了奥迪A6的启动功能!“ );/实现turbo方法public void turbo()System.out.println(“调用了奥迪A6的加速功能!“ );/定义非抽象类Audi_A8继承自Audiclass Audi_A8 extends Audi/实现startUp方法public void startUp()System.out.println(“调用了奥迪A8的启动功能!“ );/实现turbo方法public void turbo()System.out.println(“调用了奥迪A8的加速功能!“ );public class TestAbstractpublic stat
5、ic void main(String args)/创建Audi_A6 对象并使该类引用 a6指向该对象Audi_A6 a6=new Audi_A6();/调用Audi_A6 对象中的方法a6.startUp();a6.turbo();/创建Audi_A8 对象并使该类引用 a8指向该对象Audi_A8 a8=new Audi_A8();/调用Audi_A8 对象中的方法a8.startUp();a8.turbo();程序运行结果:-调用了奥迪A6的启动功能!调用了奥迪A6的加速功能!调用了奥迪A8的启动功能!调用了奥迪A8的加速功能!-上面的例子里定义了4个类,其中 Car和Audi 为抽象
6、类,他们分别代表轿车和奥迪轿车,故不适具体类,因为轿车和奥迪轿车还有很多子类。四、另外要注意的是,方法永远不能同时标示为abstract和final ,因为abstract修饰的方法必须要重写实现其方法,而final是阻止重写的。当然private和abstract 也不能同时修饰方法,因为private阻止继承,也就阻止了重写实现,这与abstract也是相违背的。补:abstract不能和static同时使用以下是关于抽象类和方法在银行系统(部分)的简单应用:【Account.java】package day7am;/模板设计模式public abstract class Account
7、private int id;private double bounds=1000;/金额public Account()public abstract double getAll();public int getId() return id;public void setId(int id) this.id = id;public double getBounds() return bounds;public void setBounds(double bounds) this.bounds = bounds;【HAccount.java】package day7am;public clas
8、s HAccount/活期类 extends Accountpublic double getAll()return this.getBounds()*0.03;public static void main(String args)Account a=new DAccount();/System.out.println(a.getAll();class DAccount extends Account/定期类public double getAll()return this.getBounds()*0.05; -程序运行结果:50.0-【OpAccount.java】package day7am;public class OpAccount /注销用户/开闭原则,对扩展代码开放,对修改现有代码关闭public double deleteAccount(Account a)return a.getBounds()+a.getAll();public static void main(String args) OpAccount op=new OpAccount();System.out.println(op.deleteAccount(new DAccount();-程序运行结果:1050.0-