1.关键字abstract概念及要点
1)abstract:抽象的,可以用来修饰类、方法
2)abstract关键字可以修饰类或方法。
3)abstract类可以扩展(增加子类),但不能直接实例化。
4)abstract方法不在声明它的类中实现,但必须在某个子类中重写。
5)采用 abstract 方法的类本来就是抽象类,并且必须声明为 abstract。
6)abstract 类不能实例化。
7)仅当 abstract 类的子类实现其超类的所有 abstract 方法时,才能实例化 abstract 类的子类。这种
类称为具体类,以区别于 abstract类。
8)如果 abstract 类的子类没有实现其超类的所有 abstract 方法,该子类也是 abstract 类。
9)abstract 关键字不能应用于 static、private 或 final 方法,因为这些方法不能被重写,因此,不能
在子类中实现。
10)final 类的方法都不能是 abstract,因为 final 类不能有子类。
2.abstract修饰类:抽象类
1)不可被实例化
2)抽象类有构造器 (凡是类都有构造器)
3)抽象方法所在的类,一定是抽象类。
4)抽象类中可以没有抽象方法。
5)当我们设计一个类,不需要创建此类的实例时候,就可以考虑将其设置为抽象的,由其子类实现这个
类的抽象方法以后,就行实例化
3.abstract修饰方法:抽象方法
1)格式:没有方法体,包括{}.如:public abstract void eat();
2)抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法。
3)若子类继承抽象类,并重写了所有的抽象方法,则此类是一个"实体类",即可以实例化
4)若子类继承抽象类,没有重写所有的抽象方法,意味着此类中仍有抽象方法,则此类必须声明为抽象
的!
- 模板方法的设计模式
- //模板方法设计模式
- public class TestTemplate {
- public static void main(String[] args) {
- new SubTemplate().spendTime();
- }
- }
- abstract class Template {
- public abstract void code();
- public void spendTime() {
- long start = System.currentTimeMillis();
- this.code();
- long end = System.currentTimeMillis();
- System.out.println("花费的时间为:" + (end - start));
- }
- }
- class SubTemplate extends Template {
- public void code() {
- boolean flag = false;
- for(int i = 2;i <= 10000;i++){
- for(int j = 2;j <= Math.sqrt(i);j++){
- if(i % j == 0){
- flag = true;
- break;
- }
- }
- if(!flag){
- System.out.println(i);
- }
- flag = false;
- }
- }
- }