抽象类

2019-03-30  本文已影响0人  Finlay_Li

抽象类(abstract class)

  1. 拥有一个或多个抽象方法的类必须是抽象类
  2. 抽象类中可以有非抽象方法,但是注意2
  3. 抽象类不能创建实例,但可以声明构造器

抽象方法

  1. 子类继承父类后,若重写了父类中“所有”的抽象方法,该类为具体类,可以创建实例
  2. 子类继承父类后,若没有重写父类中“所有”的抽象方法,该类也必须是抽象类

BB了一大堆,怎么用

如下图设计,在AbstractValidateCodeProcessor中,我们可以实现create 、generate、save、validate的逻辑,而send 由子类实现各自的逻辑

image.png

有些abstarct class一定要子类实现构造函数,怎么做到的

  1. 抽象类不能创建实例,但可以声明构造器
  2. 抽象父类中声明了有参构造器,并无手动声明无参构造器
image.png

当抽象父类中非抽象方法要使用某些属性,而这些属性的值应该由
子类来给来决定

public abstract class AbstractUserDetails<T> {
    private static final String HEADER = "Authorization";
    private static final String HEADER_FIX = "bearer ";
    private SecurityProperties securityProperties;

    public AbstractUserDetails(SecurityProperties securityProperties) {
        this.securityProperties = securityProperties;
    }

    public T getUser(HttpServletRequest request) {  ....}
}
public class JwtUtils extends AbstractUserDetails<Member> {
    private MemberService memberService;

    public void setAdminService(MemberService memberService) {
        this.memberService = memberService;
    }

    public JwtUtils(SecurityProperties securityProperties) {
        super(securityProperties);
    }

    @Override
    protected Member parserUser(String var) {
        return memberService.queryByPhoneOrEmail(var);
    }
}
上一篇下一篇

猜你喜欢

热点阅读