• Java 抽象类和接口


    抽象类

    关键字: abstract

    抽象类特点:

    1. 方法只有声明没有实现时, 该方法就是抽象方法, 需要被 abstract 修饰,
      抽象方法必须定义在抽象类中, 该类必须也被 abstract 修饰
    2. 抽象类不可以被实例化. 因为抽象方法没有方法体, 调用抽象方法没有意义
    3. 抽象类的子类必须覆盖父类的所有抽象方法后, 该子类才可以实例化

    抽象类的细节

    1. 抽象类不可以被实例化, 但是有构造函数. 用于给子类对象进行初始化.
    2. 抽象类中可以不定义抽象方法, 但是很少见. 目的就是不让该类创建对象. AWT 的适配器对象就是这种类.
      通常这个类的方法有方法体, 但是却没有内容.
    abstract class Demo
    {
        void show1()
        {}
    
        void show2()
        {}
    }
    
    1. 抽象关键字不可以和下列关键字共存:
      • private, 抽象类中的方法需要被子类覆盖, 私有之后, 找不到该方法, 无法达到覆盖的目的
      • static, 静态修饰的内容可以直接用类名调用, 但是抽象方法没有方法体, 调用之后, 没有意义
      • final, 被 final 修饰的类不能被继承, 方法不可以被覆盖
    2. 抽象类和一般类的异同点:
      • 相同点
        • 抽象类和一般类都是用来描述事物的, 都在内部定义了成员
      • 不同点
        • 一般类有足够的信息描述事物
          抽象类描述事物的信息有可能不足
        • 一般类中不能定义抽象方法, 只能定义非抽象方法
          抽象类中可定义抽象方法, 同时也可定义非抽象方法
        • 一般类可以被实例化
          抽象类不可以被实例化
    3. 抽象类一定是个父类. 因为需要子类覆盖其方法后才可以对子类进行实例化

    接口 (interface)

    格式: interface {}

    当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一中形式定义和表示, 就是接口(interface)

    // 抽象类
    abstract class AbsDemo
    {
        abstract void show1();
        abstract void show2();
    }
    
    // 接口
    interface Demo
    {
        public abstract void show1();
        public abstract void show2();
    }
    

    备注:

    1. 定义接口使用的关键字不是 class, 是 interface
    2. 接口编译后, 仍然是 .class 文件

    接口中常见成员: 全局常量和抽象方法. 这些成员的修饰符是固定的

    • 成员常量: public static final
    • 成员函数: public abstract
    • 接口中的成员都是 public 的

    接口的出现将 "多继承" 通过另一种形式体现出来, 即"多实现"

    • 类与类之间是单继承关系
    • 类与接口之间是实现关系 (implements), 而且类可以继承一个类的同时实现多个接口
    • 接口与接口之间可以有继承关系, 而且接口可以多继承.
      因为接口没有方法体, 多继承在类中无法实现, 是因为同名方法体在调用时, 产生不确定性.
    interface CC
    {
        public abstract void show();
    }
    
    interface MM
    {
        public abstract void method();
    }
    
    interface QQ extends CC,MM
    {
        public abstract void function();
    }
    
    class WW implements QQ
    {
        // 需要覆盖 3 个方法
        public void show(){}
    
        public void method(){}
    
        public void function(){}
    }
    

    接口的特点

    1. 接口是对外暴露的规则
    2. 接口是程序的功能扩展
    3. 接口的实现降低耦合性
    4. 接口可以用来多实现

    接口和抽象类的异同点

    • 相同点
      • 都是不断向上抽取而来的
    • 不同的
      • 抽象类需要被继承, 而且只能单继承
        接口需要被实现, 而且可以多实现
      • 抽象类中可以定义抽象方法和非抽象方法, 子类继承后, 可以直接使用非抽象方法
        接口中只能定义抽象方法, 必须全由子类去实现
      • 抽象类的继承是 is a 关系, 是在定义该体系的基本共性内容
        接口的实现是 like a 关系, 是在定义该体系的额外功能

    类与对象的关系

    类与接口的关系


    参考资料

  • 相关阅读:
    8-12-COMPETITION
    The Rotation Game(IDA*算法)
    Largest Rectangle in a Histogram(DP)
    Top ShooterHDU2863&&继续xxx定律HDU3784
    NYOJ 536 开心的mdd(DP)
    POJ1328 Radar Installation 图形转化 贪心 排序
    cout:格式算子与保留精度
    POJ 2109 Power of Cryptography二分+大数相乘和pow为什么可以直接过的原因
    字符串交换函数
    纪念一次失败的暴力 统计回文字串
  • 原文地址:https://www.cnblogs.com/linkworld/p/7440845.html
Copyright © 2020-2023  润新知