当前位置: 首页 > news >正文

Java接口:小白如何初步认识Java接口?

1.接口的引入

在Java中,继承只能支持单继承,并不支持类的多重继承(也就是一个类不能继承多个父类),但在实际开发中,我们常常需要让一个类具备多种不同的行为,而不仅仅是单一继承所能提供的功能。

比如:Animal类中有能飞的(fly)、跑的(run)、游的(swim),其中Bird类只能飞,Dog类既可以跑又可以游,Duck类不仅能飞能跑,还能游。但是Duck类并不能同时继承飞、跑和游,此时该如何实现呢?

这时候该怎么解决呢?

此时就需要接口(Interface),接口是公共的行为规范标准,只要符合这个标准,那么就可以通用。

  1. 接口定义了一组方法规范,但不提供具体实现。也就是是这一定是一个抽象的方法,由实现该接口的方法来实现。

  2. 类可以实现(implements)多个接口,从而具备多种能力。

 2.接口的语法

接口的定义和类的定义相似,类的定义用到的关键字是 class,而接口的定义需要用到关键字interface。具体定义如下:

 public  interface  接口名称 {

          //抽象方法

          public abstract  void  method1 ();//1

         public  void  method2();//2

         abstract  void  method3();//3

         void  method4;//4

}

 其中,以上四个方法都是正确的,但在Java中,public abstract是默认搭配的,也就是说可以写也可不写,当方法中带有abstract时,它是一个抽象方法,也就是说,其实接口也可以理解为比抽象还要抽象一点的类,其方法是抽象方法,实现这个接口的方法必须重写这个抽象方法。并且在创建接口时,接口的名称一般以大写字母 开头。

Java中,子类和父类之间是 extends 实现继承关系,而类与接口之间用 implements 来实现。 

比如定义了一个IFlying这个接口,Bird类想要实现这个接口,那么就可以有: 

//动物类
public class Animal {public String name;public int age;public Animal(String name , int age) {this.name = name;this.age = age;}
}
//飞这个接口
public interface IFlying {void fly() ;
}
//鸟类,继承父类Animal,并实现IFlying接口
public class Bird extends Animal implements IFlying{public Bird(String name , int age) {super(name , age);}@Overridepublic void fly() {System.out.println(this.name + "正在飞来飞去!!!");}
}
//测试类
public class Main {public static void main(String[] args) {Bird bird = new Bird("愤怒的小鸟" , 5);bird.fly();}
}

 3.接口的特性

3.1 接口类型是一种引用类型,但是不能new接口的对象

接口里面的方法是一个抽象方法,有抽象方法的一定是属于抽象类的范畴,自然就不能对其进行实例化。也就是说以下是错误的: 

 

3.2 接口中的方法都默认是抽象方法,被 public abstract  所修饰,并且也只能被这个修饰,如果被其他的修饰符如 public 改成 protected ,则会报错

 3.3 接口中的方法是抽象方法,所以它的方法体只能由实现接口的类来实现方法体

3.4 重写接口的方法时,不能使用默认的访问权限

接口的抽象方法默认是public修饰,因此在重写该方法时,要写上public修饰,如果不写,会默认是default访问权限修饰 

3.5 接口中可以含有变量,但默认是 public static final 变量,也就是这个变量不能被修改 

3.6 接口中不能有静态方法和构造方法 

4.实现多个接口 

认识接口后,在这里把本文开头引出接口的例子完整实现代码如下: 

//动物类---父类
public class Animal {public String name;public int age;public Animal(String name , int age) {this.name = name;this.age = age;}
}
//可以飞的接口
public interface IFlying {void fly();
}
//可以跑的接口
public interface IRunning {void run();
}
public interface ISwimming {void swim();
}
//鸟类,既是子类,又是实现飞这个接口
public class Bird extends Animal implements IFlying{public Bird(String name , int age) {super(name , age);}@Overridepublic void fly() {System.out.println(this.name + "正在飞来飞去!!!");}
}
//狗类,既是子类,又是实现能跑能游这个接口
public class Dog extends Animal implements IRunning,ISwimming{public Dog(String name , int age) {super(name , age);}@Overridepublic void run() {System.out.println(this.name + "正在跑来跑去!!!");}@Overridepublic void swim() {System.out.println(this.name + "正在游来游去!!!");}
}
//鸭类,既是子类,又是实现能跑能游能飞这个接口
public class Duck extends Animal implements IRunning,ISwimming,IFlying {public Duck(String name , int age) {super(name , age);}@Overridepublic void fly() {System.out.println(this.name + "正在飞来飞去!!!");}@Overridepublic void run() {System.out.println(this.name + "正在跑来跑去!!!");}@Overridepublic void swim() {System.out.println(this.name + "正在游来游去!!!");}
}

以上代码展示了Java作为面向对象的编程中最常见的用法:一个类虽然只能继承一个父类,但可以同时实现多个接口。

在Java中,类和类是单继承的,一个类可以实现多个接口,所以使用接口就可以达到多继承的目的。

当这样写代码后,在以后重新写某个类(可以不是Animal类)时,也可以直接调用该类所具有的行为。

5. 抽象类和接口的区别 

 核心区别:抽象类中可以包含普通方法和普通字段,可以被子类直接使用(不需要重写),而接口中不能包含普通方法,子类必须重写所有的抽象方法。

http://www.lryc.cn/news/590301.html

相关文章:

  • C语言 个人总结1
  • 【SF顺丰】顺丰开放平台API对接(Java对接篇)
  • AI Agent开发学习系列 - langchain之LCEL(2):LCEL 链式表达解析
  • Nand2Tetris(计算机系统要素)学习笔记 Project 0
  • 单片机学习笔记.IIC通信协议(根据数据手册写IIC驱动程序,这里以普中开发板上的AT24C02为例)
  • 【深度学习基础】PyTorch中model.eval()与with torch.no_grad()以及detach的区别与联系?
  • 嵌入式学习-PyTorch(5)-day22
  • 人工智能时代下的数据新职业:新兴工作岗位版图研究
  • 智能体架构深度解构:一次用户请求的完整旅程
  • 第二十一 篇 PDF文档自动化:Python一键合并、分割、水印、提取与加密解密!你的PDF全能管家!
  • audiorecord 之 抢占优先级
  • rLLM:用于LLM Agent RL后训练的创新框架
  • ESP32 S3 基于 Arduino 实现局域网视频流传输全解析
  • Python从入门到高手9.2节-Python字典的操作方法
  • 多维动态规划题解——不同路径【LeetCode】记忆化搜索
  • NumPy 常用操作详解汇总和实战示例
  • 泰语OCR识别技术方案
  • 【React Native】安装配置 Expo Router
  • STM32 ODR
  • obsidian1.8.10_win中文_Markdown编辑器_安装教程
  • 逆功率检测设备防逆流解决方案守护电网安全
  • 第五章 管道工程 5.4 管道安全质量控制
  • Uniswap V2/V3/V4简短说明
  • 功能测试和回归测试
  • 架构设计之计算高性能——单体服务器高性能
  • 更灵活方便的初始化、清除方法——fixture【pytest】
  • 使用Node搭建一个直播服务器,实时直播当前桌面
  • 获取印度股票数据API实例:NSE与BSE双市场对接指南
  • Python类中魔术方法(Magic Methods)完全指南:从入门到精通
  • [特殊字符]️ Snort 与 Suricata 入侵检测系统详解