接口

  1. 接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来

  2. 语法

    • interface 接口名{

      ​ //属性

      ​ //方法

      }

    • class 类名 implements 接口{

      ​ 自己属性;

      ​ 自己方法;

      ​ 必须实现的接口的抽象方法

      }

  3. 在 Jdk7.0 前,接口里的所有方法都没有方法体,即都是抽象方法

    ​ Jdk8.0 后接口可以有静态(static)方法,默认(default)方法,也就是说接口中可以有方法的具体实例

  4. 细节

    1. 接口不能被实例化

    2. 接口中所有的方法是 public 方法,接口中抽象方法,可以不用 abstract 修饰

    3. 一个普通类实现接口,就必须将该接口的所有方法都实现

    4. 抽象类实现接口,可以不用实现接口的方法

    5. 一个类同时可以实现多个接口

    6. 接口中的属性只能是 final 的,而且是 public static final 修饰。

      ​ 比如 int a = 1; 实际上是 public static final int a = 1; (必须初始化)

    7. 接口中属性的访问形式:接口名.属性名

    8. 接口不能继承其他的类,但是可以继承多个别的接口

      ​ interface A extends B,C{}

    9. 接口的修饰符只能是 public 和默认,这点和类的修饰符是一样的

  5. 接口和继承

    • 继承的价值主要在于:解决代码的复用性和可维护性
    • 接口的价值主要在于:设计,设计好各种规范(方法),让其他类去实现这些方法
    • 接口比继承更加灵活,继承是满足 is - a 的关系,而接口只需满足 like - a 的关系
    • 接口在一定程度上可以实现代码解耦 [即:接口规范性 + 动态绑定机制]
  6. 接口多态参数

    • 接口类型的变量 if01 可以指向实现了IF接口类的对象实例

      IF if01 = new Monster();
      if01 = new Car(); interface IF {}
      class Monster implements IF {}
      class Car implements IF {}
  7. 接口多态数组

    public class Interface01 {
    public static void main(String[] args) { //多态数组 -> 接口类型数组
    Usb[] usbs = new Usb[2];
    usbs[0] = new Phone_();
    usbs[1] = new Camera_(); for (int i = 0; i < usbs.length; i++) {
    usbs[i].work(); //动态绑定 //类型的向下转换
    if (usbs[i] instanceof Phone_) { //判断它的运行类型是
    ((Phone_) usbs[i]).call();
    }
    } }
    } interface Usb {
    void work();
    } class Phone_ implements Usb {
    public void call() {
    System.out.println("手机可以打电话。。。");
    } @Override
    public void work() {
    System.out.println("手机工作中、、、");
    }
    } class Camera_ implements Usb {
    @Override
    public void work() {
    System.out.println("相机工作中...");
    }
    } /*
    运行结果:
    手机工作中、、、
    手机可以打电话。。。
    相机工作中...
    */
  8. 接口多态传递现象

    public class InterfacePolyPass {
    public static void main(String[] args) { //接口类型的变量可以指向,实现了该接口的类的对象实例
    IG ig = new Teacher();
    //如果IG 继承了 IH 接口,而Teacher 类实现了 IG接口
    //那么,实际上就相当于 Teacher 类也实现了 IH接口
    //这就是所谓的接口多态传递现象
    IH ih = new Teacher();
    }
    } interface IH {
    void hi();
    }
    interface IG extends IH{ }
    class Teacher implements IG {
    @Override
    public void hi() { }
    }

Java SE 7、接口的更多相关文章

  1. JAVA SE collection接口

    collection接口:{Set,List,Queue} Set:无序集合,元素不可重复          List:有序集合,元素可重复          Queue:队列 Set{EnumSet ...

  2. Java SE 之 DAO层接口设计思想

    用图说话 好处 1.只需要定义好IBaseDao的接口方法,并只需要实现BaseDaoImpl的方法,而具体的业务类和业务类/接口的方法的基本方法(IBaseDao已定义的)并不需要再考虑实现. 2. ...

  3. 《写给大忙人看的java se 8》笔记

    现在才来了解java8,是不是后知后觉了点? 新的编程技术,个人不喜欢第一时间跟进. 待社区已有实践积淀再切入似乎更划算些? 一点点精明的考虑. 不多说,上代码. //读<写给大忙人看的java ...

  4. Java SE 基础:标识(zhì)符

    Java SE 基础:标识(zhì)符 一.标识符定义 标识符,就是给类.接口.方法.变量等起名字时的字符序列 二.组成规则与注意事项 1.组成规则 英文大小写字母 数组 $ 和 _ 2.注意事项 不 ...

  5. Java Se :Map 系列

    之前对Java Se中的线性表作了简单的说明.这一篇就来看看Map. Map系列的类,并不是说所有的类都继承了Map接口,而是说他们的元素都是以<Key, Value>形式设计的. Dic ...

  6. Java SE 6 新特性: Java DB 和 JDBC 4.0

    http://www.ibm.com/developerworks/cn/java/j-lo-jse65/index.html 长久以来,由于大量(甚至几乎所有)的 Java 应用都依赖于数据库,如何 ...

  7. Java SE 6 新特性: 对脚本语言的支持

    2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...

  8. Java SE/ME/EE的概念介绍

    转自 Java SE/ME/EE的概念介绍 多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用. ...

  9. java se 6在solaris的可观察性特征分析

        java平台标准版(java se)6,代码名为"mustang",是最新的java se发行版本(正在开发中).java se 6源码和二进制代码都可以在www.java ...

  10. Java SE 6 新特性: HTTP 增强--转

    概述 Java 语言从诞生的那天起,就非常注重网络编程方面的应用.随着互联网应用的飞速发展,Java 的基础类库也不断地对网络相关的 API 进行加强和扩展.在 Java SE 6 当中,围绕着 HT ...

随机推荐

  1. go-zero微服务实战系列(十一、大结局)

    本篇是整个系列的最后一篇了,本来打算在系列的最后一两篇写一下关于k8s部署相关的内容,在构思的过程中觉得自己对k8s知识的掌握还很不足,在自己没有理解掌握的前提下我觉得也很难写出自己满意的文章,大家看 ...

  2. ASP.NET MVC-动态网页开发-宿舍管理系统

    很不容易,我在这两周为了数据库的课程设计第一次学习到了动态网页的开发.首先是尊重知识,也是为了知识不被忘记,在这里写下这第一篇博客.才疏学浅如果有什么理解错误,多包涵. 首先是环境的配置,我自己使用的 ...

  3. XJSON 是如何实现四则运算的?

    前言 在上一篇中介绍了 xjson 的功能特性以及使用查询语法快速方便的获取 JSON 中的值. 同时这次也更新了一个版本,主要是两个升级: 对转义字符的支持. 性能优化,大约提升了30%️. 转义字 ...

  4. noi-2.2基本算法之递归和自调用函数:放苹果

    先看一下题目: http://noi.openjudge.cn/ch0202/666/http://noi.openjudge.cn/ch0202/666/ 把M个同样的苹果放在N个同样的盘子里,允许 ...

  5. DFS序和7种模型

    DFS序就是将树的节点按照先根的顺序遍历得到的节点顺序 性质:一个子树全在一个连续的区间内,可以与线段树和树状数组搭配使用 很好写,只需在dfs中加几行代码即可. 代码: void dfs(ll u, ...

  6. Java开发学习(十六)----AOP切入点表达式及五种通知类型解析

    一.AOP切入点表达式 对于AOP中切入点表达式,总共有三个大的方面,分别是语法格式.通配符和书写技巧. 1.1 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法 切入点表达式:要进行增 ...

  7. YII XSS(跨站脚本攻击)

    \Yii::$app->response->headers->add('X-XSS-Protection','0');//表示关闭YII的跨站脚本过滤//http://www.fro ...

  8. 小试牛刀:Linux中部署RabbitMQ

    一.下载地址 本人采用的是 RabbitMQ 3.8.20+ Erlang 23.3.4.16 1.Erlang下载:https://github.com/erlang/otp/releases 2. ...

  9. WindTerm:新一代开源免费的终端工具,GitHub星标6.6k+,太酷了!

    继 Tabby.Warp 后,今天再来给大家推荐一款终端神器--WindTerm,完全开源,在 GitHub 上已经收获 6.6k 的 star. https://github.com/kingToo ...

  10. LuoguP5322 [BJOI2019]排兵布阵(DP)

    城为物,人为容,价值?排序后,一切都明了 #include <iostream> #include <cstdio> #include <cstring> #inc ...