• 面向对象之接口与抽象性


    一、接口(interface)

      1、定义

      • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要...则必须能...”的思想。继承是一个"是不是"的关系,而接口实现则是 "能不能"的关系
      • 接口的本质是契约,标准,规范,就像我们的法律一样。制定好后大家都要遵守
      • 一个类可以实现多个接口,可以得到多重继承的效果

      2、接口的使用说明(JDK7及以前)

      • ① Java中,接口(interface) 是与类(class)并列的结构
      • ② 如何定义一个接口:使用interface关键字
      • ③ 接口中只能定义全局常量和抽象方法
        • 全局常量:public static final的,但是书写时,可以省略不写

           

        • 抽象方法:public abstract修饰

           

      • ④ 接口中不能定义构造器,意味着接口不可以实例化。

           

      • ⑤ Java开发中,接口通过让类去实现(implements)的方式来使用
        • 类实现接口以后,就获取了接口中声明的结构:常量、抽象方法
        • 如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化

           

        • 如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类

            

      • ⑥ Java类可以实现多个接口
        • 弥补了Java单继承性的局限性
        • 格式:class AA extends BB implements CC,DD,EE

            

      • ⑦ 接口与接口之间可以继承,而且可以多继承

      • ⑧ 接口的具体使用,体现多态性

      • ⑨ 接口的主要用途就是被实现类实现。(面向接口编程)

      3、Java8中接口的新规定

      • ① 接口中可以定义静态方法、默认方法

      • ② 接口中定义的静态方法,只能通过接口进行调用,无法通过实现类及其对象调用

      • ③ 接口中定义的默认方法,可以通过实现类的对象调用,无法通过实现类调用

      • ④ 如果类实现的接口和继承的父类中,定义了同名同参数的方法,那么子类在没重写此方法的情况下,默认调用的是父类中声明的方法。“类优先”原则
      • ⑤ 如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下,会出现接口冲突问题。要求实现类必须重写接口中的方法
      • ⑥ 如何在子类(或实现类)的方法中调用父类、接口中被重写的方法

      • ⑦ 类实现接口以后,(1)要么实现接口中的所有抽象方法,方可实例化;(2)要么当前类声明为抽象类(因为内部包含从接口中获取的抽象方法)
      • ⑧ 类可以继承多个接口,接口也可以继承接口,一定程度上解决了类的单继承性;接口与接口之间可以多继承也可以单继承

      4、创建接口匿名实现类的对象

      • 1.创建了接口的非匿名实现类的非匿名对象

      • 2. 创建了接口的非匿名实现类的匿名对象

      • 3.创建了接口的匿名实现类的非匿名对象

      • 4. 创建了接口的匿名实现类的匿名对象

      5、接口的应用

      • 代理模式(Proxy)
        • 概述:代理模式是Java开发中使用较多的一种设计模式。代理设计就是为其他对象提供一种代理以控制对这个对象的访问

        • 应用场景

      • 工厂模式

      6、implements(实现)

      • 语义:implements是接口(interface)中的一个关键词,用来让类实现接口
      • 使用场景:
        • ① 实体类与接口之间的实现
        • ② 抽象类与接口之间的实现

    二、抽象性

      1、定义

      • 抽象性也可以作为面向对象的一个特征
      • 可以用来修饰的结构:类、方法
      • abstract:抽象的

      2、抽象性体现

        1)修饰类:class abstract 类名{类中结构}

        • ① 此类不能实例化

            

        • ② 抽象类中一定有构造器,便于子类实例化时调用(涉及:子类对象实例化的全过程)
        • ③ 开发中,都会提供抽象类的子类,让子类对象实例化,调用父类的结构,完成相关的操作
        • ④ 抽象类中不一定有抽象方法;反之,包含抽象方法的类,一定是一个抽象类

        2)修饰方法:权限修饰符 abstract 返回值类型 方法名(形参)

        • ① 抽象方法只有方法的声明,没有方法体,所有此方法一定不能被调用
        • ② 若子类重写了父类中的所有的抽象方法后,此子类方可实例化

        • ③ 若子类没有重写父类(包括间接父类)中的所有的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰

        3)注意:

        • ① 前提:抽象性使用的前提是类的继承性
        • ② abstract不能用来修饰:属性、构造器等结构
        • ③ abstract不能用来修饰私有方法、静态方法、final的方法、final的类

      3、抽象类的匿名子类

      • 非匿名的类非匿名的对象

         

      • 非匿名的类匿名的对象

     

      • 创建匿名子类的非匿名对象

     

      • 创建匿名子类的匿名对象

     

      4、模板方法设计模式(TemplateMethod)

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

  • 相关阅读:
    http://codeforces.com/problemset/problem/594/A
    http://codeforces.com/contest/610/problem/D
    http://codeforces.com/contest/612/problem/D
    http://codeforces.com/problemset/problem/712/D
    http://codeforces.com/problemset/problem/545/D
    18/10/26 周五集训队第二次比赛补题题解
    归并排序
    hdu 2510 符号三角形
    位运算符的小总结
    hdu 1584 蜘蛛纸牌
  • 原文地址:https://www.cnblogs.com/zhufeng123/p/12349515.html
Copyright © 2020-2023  润新知