【Java】接口 interface

目录

 概述

示例代码:

接口成员访问特点

示例代码:


概述

什么是接口

接口就是一种公共的规范标准,只要符合规范标准,大家都可以调用。

Java 中的接口更多的体现在对行为的抽象!

1. 接口 用关键字 interface 修饰

public interface 接口名 {}

2. 类实现接口用 implements 表示

public class 类 implements 接口 {}

3. 接口不能实例化

  • 接口如何实例化呢?

        参照多态的方式,通过实现类对象实例化,这叫接口多态

  • 多态的形式:具体类多态,抽象类多态,接口多态。

4. 多态的前提:

  • 有继承(抽象类)或者实现(接口)关系;
  • 有方法重写;
  • 有父(类/接口引用)指向(子/实现)类对象

5. 接口的实现类

要么重写接口中所有的抽象方法、要么是抽象类

示例代码:

Animal.java

package com.面向对象.Demo28;public interface Animal {// 接口 Animalpublic abstract void eat();}

CatImpl.java

package com.面向对象.Demo28;public class CatImpl implements Animal {// CatImpl————实现类 实现了Animal接口/*** 实现类 必须重写 接口中的所有方法*/@Overridepublic void eat() {System.out.println("CatImpl-eat()-鱼");}/*** abstract class AnimalParent————抽象类  父类* Cat extends AnimalParent————子类** 接口 主要体现抽象的行为* interface Animal————接口  父类* CatImpl implements Animal 实现类Animal接口  子类** 抽象类 与 接口 有哪些区别?*/
}

Test01.java

package com.面向对象.Demo28;public class Test01 {public static void main(String[] args) {
//        new Animal();// 报错,抽象类与接口 不能被实例化// 都是通过 多态机制Animal animal = new CatImpl();animal.eat(); //CatImpl-eat()-鱼}
}

DogImpl.java

package com.面向对象.Demo28;//public class DogImpl implements Animal{// 不想在实现类里重写Animal接口——abstract//    @Override
//    public void eat() {}
public abstract class DogImpl implements Animal{}

MayiktDogImpl.java

package com.面向对象.Demo28;public class MayiktDogImpl extends DogImpl{//类图 Ctrl+Alt+u// MayiktDogImpl类 继承 DogImpl类,就必须重写 DogImpl类中的所有方法@Overridepublic void eat() {}
}


接口成员访问特点

1. 成员变量只能是常量;(直接通过接口的名称访问即可)

        默认修饰符 public static final

2. 成员方法只能是抽象方法;(JDK8开始 是可以在接口中定义非抽象方法  需要加上default)

        默认修饰符 public abstract

3. 接口没有构造方法;

        因为接口只要对行为进行抽象,没有具体存在,一个类如果没有父类,默认继承自Object类

示例代码:

Animal.java

package com.面向对象.Demo29;public interface Animal {
//    public int code1 = 100;
//    public final int code2 = 200; // final 修饰 不能修改
//    public  int code2 = 200; // final 修饰 不能修改, 默认是已经加上final
//    public static int code3 = 300; //static 修饰 Animal.属性名称 访问
//    public  int code3 = 300; //static 修饰 Animal.属性名称 访问,默认是已经加上static///*** 综上,上述代码可以简化,* 成员变量只能是常量;* 默认修饰符 public static final*/int code1 = 100; //==>public final static int code1 = 100;int code2 = 200;int code3 = 300;/*** 抽象方法* 默认前面已经加上了public abstract*/void eat();//==>public abstract void eat();/*** 在接口中 是否可以定义 非抽象方法呢? jdk8 是可以在接口中定义 非抽象方法 default* jdk8之前是不可以在接口中定义非抽象方法的*/default void show(){ // ==> public default void show(){System.out.println("接口中-非抽象方法-show()");}/*** 在我们的接口中 是没有构造方法* 抽象类 和 接口 都是不能 直接 new* 抽象类 是有 构造方法* 接口 主要是对我们的行为来做抽象的概念*/
//    public Animal(){}  // 报错,接口是没有抽象方法的
}

DogImpl.java

package com.面向对象.Demo29;public class DogImpl implements Animal { //==>public class DogImpl extends Object implements Animal{@Overridepublic void eat() {System.out.println("DogImpl-eat()");}public DogImpl() {super(); // 默认,父类中 无参构造方法 是我们Object 父类}/*** 既然 Animal接口中不可以定义无参构造方法(也不属于父类),那这里的是如何super()访问父类的?*  ∵ 定义了一个类 如果没有继承任何父类,则在默认情况下 就继承了我们的 object父类*  任何类的父类 都是 Object*  new DogImpl()————先执行Object父类-无参构造方法,再执行DogImpl-无参构造方法*/
}

Test01.java

package com.面向对象.Demo29;public class Test01 {public static void main(String[] args) {/*** 1.在接口中 定义的 成员变量 都是为 常量*      默认的成员变量是已经加上public final static 关键字的,* 2.在接口中 定义的 成员方法 默认的情况下 就是为 抽象方法*      默认已经加上了 public abstract 修饰成员方法,实现类 必须重写 接口中所用的抽象方法*/Animal dog = new DogImpl();System.out.println(dog.code1); //100System.out.println(dog.code2); //200System.out.println(dog.code3); //300//        dog.code1 = 300;//报错,常量是不可以修改
//        dog.code2 = 200;//报错,Cannot assign a value to final variable 'code2'
//        dog.code3 = 100;//报错,在接口中 定义的 成员变量 都是为 常量System.out.println("===========");System.out.println(Animal.code1); //100System.out.println(Animal.code2); //200System.out.println(Animal.code3); //300}
}

下一篇文章:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/125332.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的ElasticSearch操作(超详细教程)

一、ElasticSearch 简介 1、简介 ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多员工能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种…

ElasticSearch第四讲:ES详解:ElasticSearch和Kibana安装

ElasticSearch第四讲:ES详解:ElasticSearch和Kibana安装 本文是ElasticSearch第四讲:ElasticSearch和Kibana安装,主要介绍ElasticSearch和Kibana的安装。了解完ElasticSearch基础和Elastic Stack生态后,我们便可以开始…

Pikachu靶场——远程命令执行漏洞(RCE)

文章目录 1. RCE1.1 exec "ping"1.1.1 源代码分析1.1.2 漏洞防御 1.2 exec "eval"1.2.1 源代码分析1.2.2 漏洞防御 1.3 RCE 漏洞防御 1. RCE RCE(remote command/code execute)概述: RCE漏洞,可以让攻击者直接向后台服务器远程注入…

flex布局与几个实例(含源码)

本文简单的说明下flex布局 有源码实例,后续会持续添加 flex默认主轴是横轴 容器主要有6个属性 flex-direction 决定主轴的方向 flex-direction: row | row-reverse | column | column-reverse; flex-wrap 决定是否换行 flex-wrap: nowrap | wrap | wrap-revers…

华为云云耀云服务器L实例评测|Elasticsearch的springboot整合 Kibana进行全查询和模糊查询

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 在前几期的博客中,介绍了Elasticsearch的Docker版本的安装,Elasticsearch的可视化Kibana工具…

手搭手Mybatis-Plus多数据源异构数据迁移案例

环境介绍 技术栈 springbootmybatis-plusdruidbaomidoumysqloracledm 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis 2.3.1 pom.xml所需依赖 <dependencies><dependency><groupId>org.springframework.…

6轮面试阿里Android开发offer,薪资却从21k降到17k,在逗我?

一小伙工作快3年了&#xff0c;拿到了阿里云Android开发岗位P6的offer&#xff0c;算HR面一起&#xff0c;加起来有6轮面试了&#xff0c;将近3个月的时间&#xff0c;1轮同级 1轮Android用人部门leader 1轮Android 组leader 1轮项目CTO 1轮HR 1轮HRBP。 一路上各种事件分…

Vue中如何进行响应式图像与图片懒加载优化

Vue中响应式图像与图片懒加载优化 在现代的Web开发中&#xff0c;图像在网站性能和用户体验方面扮演着至关重要的角色。然而&#xff0c;加载大量的图像可能会导致网页加载速度变慢&#xff0c;从而影响用户的满意度。为了解决这个问题&#xff0c;Vue.js提供了一些强大的工具…

联想M7216NWA一体机连接WiFi及手机添加打印机方法

联想M7216NWA一体机连接WiFi方法&#xff1a; 1、首先按打印机操作面板上的“功能键”&#xff1b;【用“”&#xff08;上翻页&#xff09;“-”&#xff08;下翻页&#xff09;来选择菜单的内容】 2、下翻页键找到并选择“网络”&#xff0c;然后“确认键”&#xff1b; 3…

【图像处理】使用各向异性滤波器和分割图像处理从MRI图像检测脑肿瘤(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

讲讲项目里的仪表盘编辑器(二)

应用场景 正常来说&#xff0c;编辑器应用场景应该包括&#xff1a; 编辑器-预览 编辑器 最终运行时 怎么去设计 上一篇推文&#xff0c;我们已经大概了解了编辑器场景。接下来&#xff0c;我们来看预览时的设计 编辑器-预览 点击预览按钮&#xff0c;执行以…

番外--Task2:

任务&#xff1a;root与普通用户的互切&#xff08;区别&#xff09;&#xff0c;启动的多用户文本见面与图形界面的互切命令&#xff08;区别&#xff09;。 输入图示命令&#xff0c;重启后就由图形界面转成文本登录界面&#xff1b; 输入图示命令&#xff0c;重启后就由文本…