目标:

  • 如何创建已定义好的接口类型的对象呢?

步骤:

  • 实现的概述

  • 抽象方法的使用

  • 默认方法的使用

  • 静态方法的使用

  • 接口的常量使用

讲解:

实现的概述

类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似继承,格式相仿,只是关键字不同,实现使用 implements关键字。

非抽象子类实现接口:

  1. 必须重写接口中所有抽象方法。

  2. 继承了接口的默认方法,即可以直接调用,也可以重写。

实现格式:

class 类名 implements 接口名 {
   // 重写接口中抽象方法【必须】
// 重写接口中默认方法【可选】
}

抽象方法的使用

必须全部实现,代码如下:

定义接口:

public interface LiveAble {
   // 定义抽象方法
   public abstract void eat();
   public abstract void sleep();
}

定义实现类:

public class Animal implements LiveAble {
   @Override
   public void eat() {
       System.out.println("吃东西");
  }

   @Override
   public void sleep() {
       System.out.println("晚上睡");
  }
}

定义测试类:

public class InterfaceDemo {
   public static void main(String[] args) {
       // 创建子类对象  
       Animal a = new Animal();
       // 调用实现后的方法
       a.eat();
       a.sleep();
  }
}
输出结果:
吃东西
晚上睡

默认方法的使用

可以继承,可以重写,二选一,但是只能通过实现类的对象来调用。

  1. 继承默认方法,代码如下:

定义接口:

public interface LiveAble {
   public default void fly(){
       System.out.println("天上飞");
  }
}

定义实现类:

public class Animal implements LiveAble {
// 继承,什么都不用写,直接调用
}

定义测试类:

public class InterfaceDemo {
   public static void main(String[] args) {
       // 创建子类对象  
       Animal a = new Animal();
       // 调用默认方法
       a.fly();
  }
}
输出结果:
天上飞
  1. 重写默认方法,代码如下:

定义接口:

public interface LiveAble {
   public default void fly(){
       System.out.println("天上飞");
  }
}

定义实现类:

public class Animal implements LiveAble {
   @Override
   public void fly() {
       System.out.println("自由自在的飞");
  }
}

定义测试类:

public class InterfaceDemo {
   public static void main(String[] args) {
       // 创建子类对象  
       Animal a = new Animal();
       // 调用重写方法
       a.fly();
  }
}
输出结果:
自由自在的飞

静态方法的使用

静态与.class 文件相关,只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用,代码如下:

定义接口:

public interface LiveAble {
   public static void run(){
       System.out.println("跑起来~~~");
  }
}

定义实现类:

public class Animal implements LiveAble {
// 无法重写静态方法
}

定义测试类:

public class InterfaceDemo {
   public static void main(String[] args) {
       // Animal.run(); // 【错误】无法继承方法,也无法调用
       LiveAble.run(); //
  }
}
输出结果:
跑起来~~~

常量的使用

public interface LiveAble {
  //常量 ,必须赋值,一旦赋值,就不能修改
  public static final String MY_NAME = "wzw";
  //同以上效果一致
  int AGE = 18;
}

定义实现类:

public class Animal implements LiveAble {
// 无法重写静态常量
}

定义测试类:

public class InterfaceDemo {
   public static void main(String[] args) {
       // Animal.MY_NAME; // 【错误】无法继承方法,也无法调用
        System.out.println(LiveAble.MY_NAME); // 接口名直接调用
       System.out.println(LiveAble.AGE); // 接口名直接调用
    }
}
输出结果:
wzw
18

小结: 类实现接口使用的是implements关键字,并且一个普通类实现接口,必须要重写接口中的所有的抽象方法

jdk_8接口的内部内容的更多相关文章

  1. 正向代理 forward proxy、反向代理 reverse proxy、透明代理 transparent proxy nginx反向代理原理和配置讲解 防止外部客户机获取内部内容服务器的重定向 URL 缓存命中

    [大型网站技术实践]初级篇:借助Nginx搭建反向代理服务器 - Edison Chou - 博客园http://www.cnblogs.com/edisonchou/p/4126742.html 图 ...

  2. 微信js接口自定义分享内容

    最近客户有个要求,需要给网页添加微信分享功能,当然指的是用微信自带浏览器的时候,希望用户在最后一页点击分享的时候是分享的首页.曾经无意中看到过微信公众开发者平台提供了js接口,所以试着做了做,果然,跌 ...

  3. 通信统计接口字段填充内容shell脚本

    现在通信行业上班,最麻烦的就是计算各个协议接口字段填充的内容是否正确.经历了小白似的一个个字段统计在到单个接口所有字段统计,然后到现在的多个接口一次统计.在大大节省了时间的同时,让自己有更充足的时间来 ...

  4. jjyq app登录接口报:“内容类型不支持”???已解决

    1.在 app上进行登录操作,成功. 2.通过fiddler抓包得到jjyq登录接口的url.param.header. 3.在pycharm中使用requests发起请求,运行报错:内容类型不支持?

  5. monkeyrunner API接口文档内容

    用python编写脚本   1.导入模块: MonkeyRunner MonkeyDevice MonkeyImage ps:如果给导入模块起别名,就应该使用别名,而不能使用原名,否则会出现错误. f ...

  6. 使用FileReader接口读取文件内容

    如果想要读取或浏览文件,则需要通过FileReader接口,该接口不仅可以读取图片文件,还可以读取文本或二进制文件,同时,根据该接口提供的事件与方法,可以动态侦察文件读取时的详细状态,接下来,我们详细 ...

  7. abp 基于api接口的页面内容提交

    项目中,后端api接口需要接收来自页面提交的数据.注意下拉控件对应值,应该按以下方式赋值 @Html.DropDownListFor(m => m.IsFolder, new List<S ...

  8. Android-创建一个简单的用户接口-(补day2内容)

    如果按照之前的布局设置,那么输入框和按钮组件的大小就会是刚好满足它们的内容的.如图1. 图1.输入框和按钮宽度设置为”wrap_content” 这样的设置是可以满足按钮的,但不能满足输入框的要求,因 ...

  9. [Beginning SharePoint Designer 2010]列表和库&内部内容类型

    本章概要: 1.SPS如何组织管理数据 2.如何创建列表和文档库 3.如何使用视图来过滤分类,分组列表和库 4.如何创建内容类型来应用一个定义好的结构到数据和文档中

随机推荐

  1. C# Struct结构的介绍

    C# (Struct)结构的介绍 在 C# 中,所有简单值类型都是结构类型.结构类型是一种可封装数据和相关功能的值类型 ,是隐式密封的值类型,不可继承. 使用 struct 关键字定义结构类型.str ...

  2. Python:读取Excel表格时出现的u'\u51c6’ 无法正确显示汉字

    读取Excel后,想显示其中一行的元素,结果读出来是这样[u'\u51c6\u8003\u8bc1\u53f7', u'\u8003\u751f\u59d3\u540d'],始终不显示正常的汉字 依照 ...

  3. logging日志模块、配置字典

    logging日志模块 知识点很多 但是需要掌握的很少(会用即可) import logging # 日志有五个等级(从上往下重要程度不一样) # logging.debug('debug级别') # ...

  4. petite-vue源码剖析-v-if和v-for的工作原理

    深入v-if的工作原理 <div v-scope="App"></div> <script type="module"> i ...

  5. Linux CentOS7.X-安装jdk

    一.下载 jdk 的 tar 包 网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.h ...

  6. Visual Studio快捷技能

    一.移动光标

  7. GateWay配置使用

    是什么 Cloud全家桶中有个很重要的组建就是网关,在1.x版本中都是采用的Zuul网关 但在2.X版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关替代Zuul Sprin ...

  8. k8s线上某些特殊情况强制删除 StatefulSet 的 Pod 要考虑什么隐患?

    k8s线上某些特殊情况强制删除 StatefulSet 的 Pod 要考虑什么隐患? 考点之什么情况下,需要强制删除 StatefulSet 的 Pod? 考点之如果 StatefulSet 操作不当 ...

  9. querylist 在laravel框架中的简单采集数据(专业5)

    //爬虫网站路由Route::get('/querylist/list','querylistControllers@querylist'); //控制器 <?phpnamespace App\ ...

  10. (acwing蓝桥杯c++AB组)2.1 二分

    二分与前缀和 文章目录 二分与前缀和 二分 整数二分核心思想 整数二分模板 整数二分步骤总结: 题目链接 实数二分核心思想: 题目链接 三分法思想: 二分 难点:二分的边界问题 整数二分核心思想 确定 ...