JavaSE——面向对象:接口

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 14:00   11   0

什么是接口:

  • 硬件接口:指的是两个硬件设备之间的连接方式。硬件接口既包括物理上的接口,还包括逻辑上上的数据传输协议。
  • 软件接口:程序代码,特殊的类。表示一种规范,是具有N个方法的特征集合。

在封装时,显示器封装了很多电子元件,最终向外暴露数据交互的孔——>>接口,目的在于实现设备和设备之间的通信。

002052_GXoz_3746823.png

在Java中,接口表示一种规范/约束/要求实现者必须遵循该规范。用来约束使用者该怎么做。

Java中的接口

专家说:多个抽象类的抽象就是接口。

说人话:在Java中最小的程序单元就是类,接口其实是一个特殊的类。

Java中的接口表示规范,用于定义一组抽象方法,表示某一类事务必须具备的功能,要求实现类必须来实现该接口并提供方法实现。

004904_IIkF_3746823.png

//演示接口
interface IConnect{
 String PI= "aaa"; //接口中的成员变量
 void doWork();  //接口中的方法
 interface IWatch{ //  接口中的类(接口)
  
 }
 
}

public class InterfaceTest {

 public static void main(String[] args) {
  
  System.out.println("AA");
 }

}

005029_wzKx_3746823.png

接口的定义和继承

012645_ScWd_3746823.png

012727_HbLH_3746823.png

类和类之间是继承关系:用extends来表示。

接口和接口之间只能是继承关系:用extends来表示。

接口和实现类之间只能是实现关系:用implements来表示。

接口的实现

215708_w5og_3746823.png

程序示例

interface PaXing{

 void doWork();  //接口中的方法
 
}

interface ShuiXing{

 void doSwim();  //接口中的方法
 
}

interface LiangQi extends PaXing,ShuiXing{  //接口的继承

 void doSwim();  //接口中的方法
 
}

class YYY implements LiangQi{ //类实现子类接口
 public void doWork(){
  System.out.println("This is YYY dowork Cat!");
 }
 public void doSwim(){
  System.out.println("This is YYY dowork Cat!");
 }
}

 class SSS implements PaXing,ShuiXing{  //类实现多接口
 public void doWork(){
  System.out.println("This is SSS dowork Cat!");
 }
 public void doSwim() {
  System.out.println("This is SSS doswim Cat!");
 }
}
 
 class Fish implements ShuiXing{ //类实现单接口
  public void doSwim(){
   System.out.println("This is Fish doswim fish!");
  }
 }

public class InterfaceTest {

 public static void main(String[] args) {
  
  SSS a=new SSS(); 
  a.doSwim();
  a.doWork();
  System.out.println("****************");
  
  PaXing d= new SSS(); 
  d.doWork();   //没有doSwim()方法
  
  System.out.println("****************");
  YYY b=new YYY(); //鄙视写法
  b.doSwim();
  b.doWork();
  System.out.println("****************");
  
  LiangQi c= new YYY(); //高级多态写法,面向接口编程。
  c.doSwim();
  c.doWork();
  System.out.println("****************");
  
  ShuiXing fish1= new Fish();
  fish1.doSwim();
 
 }

}

运行结果

This is SSS doswim Cat!
This is SSS dowork Cat!
****************
This is SSS dowork Cat!
****************
This is YYY dowork Cat!
This is YYY dowork Cat!
****************
This is YYY dowork Cat!
This is YYY dowork Cat!
****************
This is Fish doswim fish!

接口和抽象类的区别

相同点

  • 都位于继承的顶端,用于被其他实现或继承。
  • 都不能实例化
  • 都可以定义抽象方法,其子类/实现类都必须覆写这些抽象方法。

不同点

  • 接口没有构造方法,抽象类有。
  • 抽象类可包含抽象方法和普通方法,接口只能包含抽象方法(Java8之前)。
  • 类是单继承(可能是继承抽象类),却可以实现多个接口。接口是多继承。(接口弥补了java的单继承)
  • 成员变量:接口默认是public static final,抽象类是默认包权限。
  • 方法:接口里默认是public abstract ,抽象类默认是默认包访问权限。
  • 内部类:接口里默认是public static,抽象类默认是默认包访问权限。

如果接口和实现类可以完成相同的功能,尽量使用接口,面向接口编程。

转载于:https://my.oschina.net/u/3746823/blog/1605870

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP