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

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.xdnf.cn/news/15521.html

相关文章:

  • 一点点dd
  • WPF 加载和显示 GIF 图片的完整指南
  • 聚焦AI与物流核心技术:2025智慧物流论坛及长三角快递物流展会9月上海开幕
  • API Gateway HTTP API 控制客户端访问 IP 源
  • CSV 字段映射小工具 Demo
  • Thymeleaf 基础语法与标准表达式详解
  • 安全初级作业2
  • Linux LVS集群技术详解与实战指南
  • 测试工作中的质量门禁管理
  • HTML基础P1 | HTML基本元素
  • 【游戏引擎之路】登神长阶(十九):3D物理引擎——岁不寒,无以知松柏;事不难,无以知君子
  • 【uni-ui】hbuilderx的uniapp 配置 -小程序左滑出现删除等功能
  • Django+Celery 进阶:Celery可视化监控与排错
  • 健康生活,从细节开始
  • Linux运维常用命令大全
  • JS的防抖与节流
  • 实例操作:基于 PipeLine 实现 JAVA项目集成 SonarQube代码检测通知 Jenkins
  • 基于R、Python的Copula变量相关性分析
  • 开源 python 应用 开发(七)数据可视化
  • 网络编程/Java面试/TCPUDP区别
  • Spring Boot 解决跨域问题
  • langchain--1--agent示例
  • AWS权限异常实时告警系统完整实现指南
  • 动态规划题解——分割等和子集【LeetCode】
  • Spring Boot 缓存 与 Redis
  • WPF 多窗口分文件实现方案
  • 网络安全(初级)(XSS-labs 1-8)
  • flink sql如何对hive string类型的时间戳进行排序
  • APIs案例及知识点串讲(上)
  • Jenkins全方位CI/CD实战指南