(java基础学习)abstract关键字和模板设计模式

本文介绍了抽象类的概念,如何通过抽象方法声明不确定的行为,并展示了模板设计模式在编程中的应用,通过实例说明如何利用抽象类作为子类的通用模板。涉及抽象类的特性、抽象方法的使用以及Template类模板设计模式的实际操作。
摘要由CSDN通过智能技术生成

一、abstract(抽象)

1.问题解决:当父类的某些方法需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。

当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法,这个方法就是抽象方法,用abstract来修饰该类就是抽象类。

例如 :把Animal做成抽象类,并让子类cat类实现

abstract class Animal{

String name;

int age;

abstract public void cry();

}

2.抽象类介绍

(1)用abstract关键字来修饰一个类时,这个类就叫抽象类

(2)用abstract关键字来修饰一个方法,这个方法就是抽象方法

3.抽象类细节

(1)抽象类不能被实例化

(2)抽象类不一定要包含abstract方法,也就是说,抽象类可能没有抽象方法

(3)一旦类包含了abstract方法,则这个类必须声明为abstract。

(4)abstract只能修饰类和方法,不能修饰属性和其他的。

(5)抽象类本质还是类,可以拥有任意成员(非抽象方法、静态属性等等)

(6)抽象方法不能有方法体。

(7)如果一个类继承了抽象类,那么它必须实现类的所有抽象方法,除非它自己也声明为abstract类。

(8)抽象方法不能使用private、final、static来修饰,因为这些关键字与重写相违背。

二、模板设计模式。

1.基本介绍

抽象类体现的就是一种模板设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。

2.抽象设计能解决的问题

(1)当功能内部一部分实现是确定的,一部分是不确定的,这时可以把不确定的那部分暴露出去,让子类去实现。

(2)编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给其他子类实现,就是一种模板模式。

例子:要求:(1)有多个类(2)要求统计各自完成任务的时间

package com.hspedu.abstract_.Template;

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));//end-start为job(执行时间
    }
}
package com.hspedu.abstract_.Template;

public class AA extends Template{
    @Override
    public void job() {
            int num = 0;
            for (int i = 1; i <= 900000; i++) {
                num+=i;
            }
    }
}
package com.hspedu.abstract_.Template;

public class BB extends Template{
    @Override
    public void job() {
            int num = 0;
            for (int i = 1; i <= 500000; i++) {
                num*=i;
            }
    }
}
package com.hspedu.abstract_.Template;

public  class TestTemplate {
    public static void main(String[] args) {
        new AA().calculateTime();
        new BB().calculateTime();
    }
}

我的理解:当很多类有一个类似的方法,例如AA类要计算1+到900000的时间,BB类要计算1*到500000的时间,他们编写的方法里面的代码分为 前中后 三个部分,而且只有中间这部分的代码不同,前和后 两部部分代码相同,这时我们可以写一个抽象父类,父类中写一个抽象方法和一个普通方法,抽象方法就是把AA类和BB类的方法的 中间 那一部分代码抽象出来等子类去重写就行,然后普通方法里面写  (前部分代码+抽象方法+后部分代码),然后子类继承父类,然后重写抽象方法,然后调用父类的普通方法就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值