java笔记之抽象类及模版设计模式

文章介绍了抽象类的概念,包括如何使用abstract关键字创建抽象类和抽象方法,并强调含有抽象方法的类必须是抽象类。同时,文章通过一个案例展示了模板设计模式的应用,说明如何通过抽象类提高代码的复用性和可扩展性。
摘要由CSDN通过智能技术生成


抽象类

为什么要有抽象类?
子类继承父类的方法时,重写了父类的方法,父类的该方法有时候没有必要去实现,这时便用到抽象类。

一、抽象类具体介绍

(1)用abstract关键字修饰的类,就叫抽象类,修饰的方法就叫抽象方法。如

public abstract class A{
public abstract void ok();
}

(2)
抽象方法格式:访问修饰符 abstract 返回类型 方法名();
抽象方法没有方法体,即{}。
抽象类格式:访问修饰符 abstract 类名{}
(3)抽象类中可以没有抽象方法,但含有抽象方法的类必须是抽象类。

二、抽象类细节和注意事项

(1)抽象类不能被实例化。
(2)abstract只能用来修饰类和方法,不用修饰属性和其他的。
(3)抽象类可以有类的任意成员。因为本质还是类。(如静态,非静态成员,代码块,构造方法等)
(4)如果一个类继承了抽象类,就必须继承它的所有抽象方法(除非自己也声明为抽象类)
(5)抽象类不能与private,final,static一起修饰。这些关键字都是与重写相违背。

三、抽象类模版设计模式

案例:
有多个类,要完成不同的工作job()
要求统计各自完成任务的时间。
代码如下:

public class AA {
    /*
    计算1到十万的和所用时间
    统计当前时间,在java.lang包下System类中的currentTimeMillis()方法,
    可以统计当前时间。
     */
    
    public void job(){
        int sum=0;
        long start=System.currentTimeMillis();
        for (int i = 1; i <= 100000; i++) {
            sum+=i;
        }
        long end=System.currentTimeMillis();
        System.out.println("程序执行时间为"+(end-start));
    }
}

public class BB {
    public void job(){
        int sum=0;
        long start=System.currentTimeMillis();
        for (int i = 1; i <= 8000000; i++) {
            sum*=i;
        }
        long end=System.currentTimeMillis();
        System.out.println("程序执行时间为"+(end-start));
    }
}

public class TestTemplate {
    public static void main(String[] args) {
        AA aa = new AA();
        aa.job();
        BB bb = new BB();
        bb.job();
    }
}

但这样当类比较多的时候,代码的复用性较差。

优化后:

public abstract class Template {
    public abstract void job();
    public void calculateTime(){
        long start=System.currentTimeMillis();
        job();
        long end=System.currentTimeMillis();
        System.out.println("程序执行时间为"+(end-start));
    }
}

public class AA extends Template{
    public void job(){
        int sum=0;
        for (int i = 1; i <= 100000; i++) {
            sum+=i;
        }
    }
}

这样讲共有的部分到一个模版类里面,在子类中重写父类的方法即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值