目标:

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

步骤:

  • 实现的概述

  • 抽象方法的使用

  • 默认方法的使用

  • 静态方法的使用

  • 接口的常量使用

讲解:

实现的概述

类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似继承,格式相仿,只是关键字不同,实现使用 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. 学习Spring5必知必会(7)~Spring tx

    一.spring的事务管理 1.引出事务的经典例子:银行转账发生异常 ✿ 解决:把转出钱和转入钱的业务放到同一个事务空间. ■ 分析转账过程流程: ① 首先,获取 DataSource 对象: ② 其 ...

  2. 【C# .Net GC】清除非托管类型(Finalize终结器、dispose模式以及safeHandler)

    总结 1.一般要获取一个内核对象的引用,最好用SafeHandle来引用它,这个类可以帮你管理引用计数,而且用它引用内核对象,代码更健壮 2.托管中生成并引用非托管,一但非托管和托管中的引用断开(托管 ...

  3. C# pdb类型文件的作用之一:记录具体异常的关键信息,如文件路径和行号

    pdb 是 Program Debug Database 的简称: 背景 我负责的一个Services(服务)出问题了,原因是一个 dll 内部逻辑出问题了: 在本地修改源码后,重新生成dll(Deb ...

  4. shell-if表达式(-f,-d,-s,-r,-w,-x,-eq,-ne,-ge,-gt,-le,-lt )

    文件表达式 if [ -f file ] 如果文件存在if [ -d - ] 如果目录存在if [ -s file ] 如果文件存在且非空if [ -r file ] 如果文件存在且可读if [ -w ...

  5. [GYCTF2020]Ezsqli 无列名注入

    手工注入了几下,是数字注入,过滤了 or , union 输入1||1=1   回显Nu1L 再输入 1&&(ascii(substr(database(),1,1))>32)# ...

  6. 基于COCO数据集验证的目标检测算法天梯排行榜

    基于COCO数据集验证的目标检测算法天梯排行榜 AP50 Rank Model box AP AP50 Paper Code Result Year Tags 1 SwinV2-G (HTC++) 6 ...

  7. vue初步构建项目

    新建项目文件夹 在当前文件夹打开命令行工具(shift+右键-->在次此处打开命令窗口) npm install -g vue-cli npm init webpack npm install ...

  8. ajax发送json格式与文件数据、django自带的序列化器(了解)

    上期内容回顾 聚合查询和分组查询 # 聚合查询 max min sum avg count # 查询关键字:aggregate from django.db.models import Max, Mi ...

  9. JZ-058-对称的二叉树

    对称的二叉树 题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题目链接: 对称的二叉树 代码 /** * 标题:对称的二叉树 ...

  10. SpringBoot入门二:与Mybatis整合

    一.编程步骤 1.引入依赖 springboot相关依赖(略).mybatis-spring-boot-starter.mysql.druid.lombook <dependency> & ...