对比 Java 抽象类和接口

本文探讨了Java中抽象类的构造方法使用、继承中的构造函数调用规则,以及接口的常量特性。重点介绍了接口实现多态的方式和`protected`构造器在匿名类中的应用。通过装饰者模式和特殊接口实例,揭示了抽象类和接口在软件设计中的角色。
摘要由CSDN通过智能技术生成

抽象类

  • java抽象类的构造方法与普通类的构造方法都是用来初始化的,只是抽象类不能直接调用构造方法创建抽象类的实例对象(抽象类不能实例化)。
  • 但一旦普通类继承了抽象类,普通类的构造函数就会强制调用其抽象类的构造函数(如含有有参构造器,则强制要求实现有参构造函数)。
  • 抽象类 == 不能实例化的类(一个普通类加上abstract就不能实例化了)。
  • 如果父类抽象类中有有参构造函数,在子类继承是就必须写一个构造函数来调用父类的有参构造函数(默认实现为参数一致的,可以为参数不一致的)。
  • 如果父类抽象类中无有参构造函数,在子类中可以不显示的写父类的构造函数,Java会自动生成并调用没有参数的构造函数。
  • 实例化子类就会初始化父类,初始化一个类会先初始化父类(无论父类是否抽象类都会调用父类的构造方法)。
  • 抽象类可以有静态方法,可调用(静态方法的调用不需要实例化)
  • 装饰器模式使用到了抽象类的特性,装饰类会继承抽象类,并组合抽象类。
  • 抽象是一个天然的规范+模板,不是拿来用的(实例化)。既可以全是规范,也可以全是模版。

接口

  • 接口成员变量是常量:public static final ;
  • 接口是一种实现多态的规范。多态调用时主要关注里边的方法(不用去关注方法初始化)
  • 接口是一个天然的规范,制定规则。

一种特殊的接口: protected 构造器

只能使用匿名类实现

  • 用法: 用 protected 构造器. 例如: SimpleFileVisitor.class
public class SimpleFileVisitor<T> implements FileVisitor<T> {
    /**
     * Initializes a new instance of this class.
     */
    protected SimpleFileVisitor() {
    }
    ...
}
  • 构造器是 protect 所以只有子类能访问构造器: 只能使用匿名类
// 匿名类显然继承自 SimpleFileVisitor
return new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
            throws IOException {
        if (file.toString().endsWith(".jar")) {
            System.out.println(file);
            jarCount.incrementAndGet();
        }
        return super.visitFile(file, attrs);
    }
 };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值