抽象类
当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类
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 {
@Override
public void job() {
long num = 0;
for (long i = 0; i < 10000; i++) {
num += i;
}
}
}
BB.java
package src.template;
public class BB extends Template {
@Override
public 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();
}
}