JAVA系列 小白入门参考资料 接口

2024-05-05 06:36

本文主要是介绍JAVA系列 小白入门参考资料 接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

接口

接口的概念

语法 

接口使用 

接口实现用例 

接口特性  

实现多个接口和实现用例

接口间的继承 


接口

接口的概念

在现实生活中,接口的例子比比皆是,比如:笔记本上的 USB 口,电源插座等。
电脑的 USB 口上,可以插: U 盘、鼠标、键盘 ... 所有符合 USB 协议的设备
电源插座插孔上,可以插:电脑、电视机、电饭煲 ... 所有符合规范的设备
通过上述例子可以看出: 接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用
Java 中,接口可以看成是:多个类的公共规范,是一种引用数据类型。 

语法 

接口在语法上和类相似 

public interface 接口名称 {

......

}

提示:   创建接口时, 接口的命名一般以大写字母 I 开头 

接口使用 

接口不能直接使用,必须要有一个"实现类""实现"该接口,并实现接口中的所有抽象方法。

public class 类名称 implements 接口名称 {

...

}

注意:子类和父类之间是extends 继承关系,类与接口之间是 implements 实现关系。  


接口实现用例 

以笔记本电脑使用 USB 鼠标、 USB 键盘为例

USB接口        笔记本类        鼠标类        键盘类

//USB接口
public interface USB {//方法,打开设备,关闭设备void openEquipment();void stopEquipment();
}//定义鼠标类,使用接口
class Mouse implements USB {//使用接口,就要重写USB接口的抽象方法@Overridepublic void openEquipment() {System.out.println("使用鼠标");}//自定义一个鼠标点击的功能public void click(){System.out.println("鼠标点击");}@Overridepublic void stopEquipment() {System.out.println("关闭鼠标");}
}//定义键盘类,使用接口
class Keyboard implements USB{@Overridepublic void openEquipment() {System.out.println("使用键盘");}//自定义一个键盘输入的方法public void inPut() {System.out.println("键盘输入");}@Overridepublic void stopEquipment() {System.out.println("关闭键盘");}
}
//定义电脑类,使用设备
class Computer{public void powerOn(){System.out.println("打开电源");}public void useEquipment(USB usb){//这里使用USB usb的原因是:为了传参并发生向上转型usb.openEquipment();//这里会发生动态绑定//这里,我们调用了使用设备的方法,但我们有鼠标和键盘,他们都要各自特有的方法click和inPut//但usb是接口类型,直接用usb去调用他们的特有方法,不可行//区分 引用的是谁的对象if(usb instanceof Mouse){Mouse mouse = (Mouse) usb;mouse.click();}else if(usb instanceof Keyboard){Keyboard keyboard = (Keyboard) usb;keyboard.inPut();}usb.stopEquipment();}public void powerOff(){System.out.println("关闭电源");}}
class Test{public static void main(String[] args) {Computer computer = new Computer();computer.powerOn();System.out.println();computer.useEquipment(new Keyboard());System.out.println();computer.useEquipment(new Mouse());System.out.println();computer.powerOff();}
}


接口特性  

  1. 接口类型是一种引用类型,不能直接 new 接口的对象
  2. 接口中的每一个方法都是默认被 public private 修饰
  3. 接口中的方法不能在接口中实现(因为抽象方法不能有具体的实现),只能由实现接口的类来实现
  4. 重写接口中的方法时,不能使用默认的访问权限(因为接口的方法默认是public)
  5. 接口中可以拥有变量,但接口中的变量会默认被public static final 修饰
  6. 接口中不能有静态代码块和构造方法
  7. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class
  8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类

实现多个接口和实现用例

Java 中,类和类之间是单继承的,一个类只能有一个父类,即 Java 中不支持多继承 ,但是 一个类可以实现多个接
下面通过类来表示一组动物
创一个动物类
//动物类
class Animals{private String name;public Animals(String name) {this.name = name;}
}

创几个接口 

//吃 接口
interface EAT{void eat();
}//跑 接口
interface RUN{void run();
}//飞 接口
interface FLY{void fly();
}//游泳 接口
interface SWIM{void swim();
}

创几个具体的动物类 

小狗,可以吃和跑 

class Dog extends Animals implements EAT,RUN{public Dog(String name) {super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}
}

小鱼,可以吃和游 

class Fish extends Animals implements EAT,SWIM{public Fish(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void swim() {System.out.println(this.name + "在游");}
}

小鸭子,可以吃,飞,跑和游

class Duck extends Animals implements EAT,RUN,FLY,SWIM{public Duck(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}@Overridepublic void fly() {System.out.println(this.name + "在飞");}@Overridepublic void swim() {}
}

上面的代码展示了 Java 面向对象编程中最常见的用法: 一个类继承一个父类, 同时实现多种接口 

继承表达的含义是 is - a 语义, 而接口表达的含义是 具有 xxx 特性 

以下是完整代码和执行结果 

class Animals{public String name;public Animals(String name) {this.name = name;}
}//吃 接口
interface EAT{void eat();
}//跑 接口
interface RUN{void run();
}//飞 接口
interface FLY{void fly();
}//游泳 接口
interface SWIM{void swim();
}class Dog extends Animals implements EAT,RUN{public Dog(String name) {super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}
}class Fish extends Animals implements EAT,SWIM{public Fish(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void swim() {System.out.println(this.name + "在游");}
}class Duck extends Animals implements EAT,RUN,FLY,SWIM{public Duck(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}@Overridepublic void fly() {System.out.println(this.name + "在飞");}@Overridepublic void swim() {}
}public class Blog {public static void main(String[] args) {Dog dog = new Dog("小狗");dog.eat();dog.run();Fish fish = new Fish("小鱼");fish.eat();fish.swim();Duck duck = new Duck("小鸭子");duck.eat();duck.fly();duck.run();duck.swim();}}


接口间的继承 

Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:用接口可以达到多继承的目的。
接口可以继承一个接口, 达到复用的效果. 使用 extends 关键字
interface RUN{void run();
}//游泳 接口
interface SWIM{void swim();
}interface ICanDo extends RUN, SWIM {
}class Frog implements ICanDo {...
}

 通过接口继承创建一个新的接口 ICanDo 表示 "两栖的". 此时实现接口创建的 Frog , 就继续要实现 run 方法, 也需要实现 swim 方法.

接口间的继承相当于把多个接口合并在一起

这篇关于JAVA系列 小白入门参考资料 接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961012

相关文章

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决Spring运行时报错:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

《解决Spring运行时报错:Considerdefiningabeanoftype‘xxx.xxx.xxx.Xxx‘inyourconfiguration》该文章主要讲述了在使用S... 目录问题分析解决方案总结问题Description:Parameter 0 of constructor in x

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

Java CompletableFuture如何实现超时功能

《JavaCompletableFuture如何实现超时功能》:本文主要介绍实现超时功能的基本思路以及CompletableFuture(之后简称CF)是如何通过代码实现超时功能的,需要的... 目录基本思路CompletableFuture 的实现1. 基本实现流程2. 静态条件分析3. 内存泄露 bug