java神秘的抽象类,模板设计模式

简介: 1.概述抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。抽象类可以包含抽象方法和非抽象方法。抽象类一般会被继承,由其子类实现具体的抽象方法👴🏻


1.概述


抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。


一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。


抽象类可以包含抽象方法和非抽象方法。


抽象类一般会被继承,由其子类实现具体的抽象方法👴🏻


2.基本使用


/**
 * 抽象类
 */
// 如果一个类包含抽象方法,那么该类一定要声明为抽象类
abstract class Abstract {
    // 抽象方法
    public abstract void eat();
}


3.一些细节


抽象类常用于设计模式之中🥯

  • 抽象类不能被实例化
  • abstract只能修饰类和方法
  • 抽象类可以由任意成员(本质上还是类)
  • 如果一个类继承了抽象类,则必须要实现继承的抽象类的所有抽象方法,除非它自己也是一个抽象类


// 如果一个类包含抽象方法,那么该类一定要声明为抽象类
abstract class Abstract {
    // 抽象方法
    public abstract void eat();
}
abstract class Dog extends Abstract {
}
class Dinosaur extends Abstract {
    @Override
    public void eat() {
        System.out.println("我爱吃肉!");
    }
}


抽象方法不能声明为private,final,static来修饰,因为这些关键字都是和重写相违背的


4.抽象类的最佳实践-模板设计模式


模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern), 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现,但可以成为典型类中定义的方式进行。


模板模式适用于通用步骤的操作,比如做菜,不管你是西红柿炒鸡蛋,还是土豆炖牛肉实现步骤都是一样的,备料,做菜,上菜。

再比如投放系统,不管你是投放巨量引擎,广点通还是百度,前期工作实现步骤也都是一样的,配置物料信息,构建投放对象,投放广告。


父类的梦想子类完成🎈


实例:计算任务的执行时间


/**
 * 抽象模板设计模式
 */
abstract public class AbstractTemplate {
    public abstract void job(); // 加入抽象方法,父类的梦想子类完成
    // 得到代码运行时间
    public void calculateTime() {
        long start = System.currentTimeMillis();
        job();
        long end = System.currentTimeMillis();
        System.out.println("任务执行时间:" + (end - start));
    }
}
// 子类实现父类的梦想
class AA extends AbstractTemplate{
    @Override
    public void job() {
        long num = 0;
        for (int i = 0; i < 800000; i++) {
            num += i;
        }
    }
}
class BB extends AbstractTemplate {
    @Override
    public void job() {
        long num = 0;
        for (int i = 0; i < 500000; i++) {
            num += i;
        }
    }
}


目录
相关文章
|
21小时前
|
安全 Java
Java基础&面向对象&继承&抽象类
Java基础&面向对象&继承&抽象类
|
1天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
1天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
1天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
1天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
|
1天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
7天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。
|
8天前
|
设计模式 Java
Java接口与抽象类
Java接口与抽象类
17 0
|
10天前
|
设计模式 算法 Java
小谈设计模式(30)—Java设计模式总结
小谈设计模式(30)—Java设计模式总结
|
11天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
16 1