当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类
1)用abstract关键字来修饰一个类时,这个类就叫抽象类
访问修饰符 abstract 类名 {}
2)用abstract关键宇来修饰一个方法时,这个方法就是抽象方法
访问修饰符 abstract 返回类型 方法名(参数列表); //没有方法体
3)抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现
4)抽象类,是考官比较爱问的知识点,在框架和设计模式使用较多
1)抽象类不能被实例化[举例]
2)抽象类不一定要包含abstract方法。也就是说抽象类可以没有abstract方法[举例
3)一旦类包含了abstract方法,则这个类必须声明为abstract [说明]
4)abstract只能修饰类和方法,不能修饰属性和其它的。[说明]
5)抽象类可以有任意成员[抽象类本质还是类] ,比如:非抽象方法、构造器、静态属性等等
6)抽象方法不能有主体,即不能实现如图所示
7)如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类。[举例 A类,B类,C类]
8)抽象方法不能使用private、final和static来修饰,因为这些关键字都是和重写相违背的。
1)有多个类,完成不同的任务job
2)要求统计得到各自完成任务的时间
3)请编程实现
感情的自然流露
1.先用最容易想到的方法
2.分析问题,提出使用模板设计模式
设计一个抽象类(Template),能完成如下功能:
1)编写方法calculate Time() ,可以计算某段代码的耗时时间
2)编写抽象方法job()
3)编写一个子类Sub,继承抽象类Template,并实现job方法。
4)编写一个测试类TestTemplate
, 看看是否好用。
Template.java
package src.template;public abstract class Template {public abstract void job();public void calTime() {long start = System.currentTimeMillis();job();long end = System.currentTimeMillis();System.out.println("任务执行时间: " + (end - start));}
}
AA.java
package src.template;public class AA extends Template {@Overridepublic void job() {long num = 0;for (long i = 0; i < 10000; i++) {num += i;}}
}
BB.java
package src.template;public class BB extends Template {@Overridepublic void job() {long num = 0;for (long i = 0; i < 10000000; i++) {num += i;}}
}
Test.java
package src.template;public class Test {public static void main(String[] args) {AA aa = new AA();aa.calTime();BB bb = new BB();bb.calTime();}
}