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

第一百一十八节 Java面向对象设计 - Java接口

Java面向对象设计 - Java接口

什么是接口?

Java中的接口定义了一个引用类型来创建抽象概念。接口由类实现以提供概念的实现。

在Java 8之前,一个接口只能包含抽象方法。 Java 8允许接口具有实现的静态和默认方法。

接口通过抽象概念定义不相关类之间的关系。

例如,我们可以创建一个Person类来表示一个人,我们可以创建一个Dog类来表示一只狗。

人和狗都可以走路。这里的步行是一个抽象的概念。狗可以走,人也是这样。这里我们可以创建一个名为Walkable的接口来表示walk的概念。然后我们可以有Person类和Dog类来实现Walkable概念并提供自己的实现。 Person类实现了Walkable接口,并使人以人的方式走路。Dog类可以实现Walkable界面,使狗以狗的方式走路。

例子

在下面我们将使用一个例子来说明为什么我们需要接口。

假设 Person 类有一个walk()方法。

public interface Walkable {void walk();
}class Person implements Walkable {public Person() {}public void walk() {System.out.println("a person is walking.");}
}
class Dog implements Walkable {public Dog() {}public void walk() {System.out.println("a dog is walking.");}
}

类可以在其声明中使用关键字implements实现一个或多个接口。

通过实现一个接口,类保证它将为接口中声明的所有方法提供一个实现,或者类将自己声明为抽象。

如果一个类实现了Walkable接口,它必须提供walk()方法的实现。

像类一样,接口定义了一个新的引用类型。

当定义一个新的接口(例如,Walkable)时,我们定义一个新的参考接口类型。

以下声明有效:

Walkable  w;  // w  is a  reference variable of  type   Walkable

您不能创建接口类型的对象,因为接口是定义抽象概念。以下代码无效:

new Walkable(); // A  compile-time error

我们可以为一个类类型创建一个对象,但是我们可以使用一个接口类型变量来引用其类实现该接口的任何对象。

因为Person和Dog类实现了Walkable接口,所以Walkable类型的引用变量可以引用这些类的对象。

Walkable  w1  = new Person(); // OK 
Walkable  w2  = new Dog();     // OK

我们可以使用它的引用类型变量访问接口的任何成员。由于Walkable接口只有一个成员,这是walk()方法,我们可以编写如下代码:

// Let  the   person  walk 
w1.walk();
// Let  the   dog walk 
w2.walk();

当调用w1上的walk()方法时,它调用Person对象的walk()方法,因为w1指的是Person对象。

当调用w2上的walk()方法时,它调用Dog对象的walk()方法,因为w2指的是Dog对象。

当使用接口类型的引用变量调用方法时,它调用它所引用的对象上的方法。

例2

下面的代码创建了一个方法来使用interface我们的参数类型。

public class Main{public static void main(String[] args) {Walkable[] w = new Walkable[2];w[0] = new Person();w[1] = new Dog();Walkables.letThemWalk(w);}
}class Walkables {public static void letThemWalk(Walkable[] list) {for (Walkable w : list) {w.walk();}}
}

声明接口

声明接口的一般语法是

<modifiers> interface <interface-name>  { Constant-DeclarationMethod-DeclarationNested-Type-Declaration
}

接口声明以修饰符列表开头,可能为空。

像类一样,一个接口可以有一个公共或包级别的作用域。

关键字public用于指示接口具有公共范围。

缺少范围修饰符指示接口具有包级别作用域。具有包级别作用域的接口只能在其包的成员内引用。

关键字interface用于声明接口,后面是接口的名称。

接口的名称必须是有效的Java标识符。

接口体跟在其名称后面并放在大括号内。

接口的主体可以为空。以下是最简单的接口声明:

package com.w3cschool;interface Updatable  {// The interface body  is empty
}

像类一样,一个接口有一个简单的名称和一个完全限定名。关键字interface后面的标识符是其简单名称。

接口的完全限定名称通过使用其包名称和用点分隔的简单名称形成。

在上面的示例中,Updatable是简单的名称,com.java2s.Updatable是完全限定名称。

使用接口的简单和完全限定名的规则与类的规则相同。

下面的代码声明一个名为ReadOnly的接口。它有一个公共范围。

package  com.w3cschool;public interface  ReadOnly {// The interface body  is empty
}

接口声明总是抽象的,无论是否明确声明它是抽象的。

标记接口

标记接口是没有成员的接口。

标记接口标记具有特殊含义的类。

interface  Shape {
}
class Circle implements Shape{
}Shape c = new Circle();if (c instanceof Shape)  {System.out.println("Using a  Shape object");
}

Java API有许多标记接口。 java.lang.Cloneable,java.io.Serializable和java.rmi.Remote都是标记接口。

功能接口

仅具有一个抽象方法的接口被称为功能接口。

多态性 - 一个对象,多个视图

多态性是指对象具有多种形式的能力。

多态性是对象提供其不同视图的能力。

接口让我们创建一个多态对象。

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

相关文章:

  • Flink nc -l -p 监听端口测试
  • 在IntelliJ IDEA中使用Spring Boot:快速配置
  • django filter 批量修改
  • maven:中央仓库验证方式改变:401 Content access is protected by token
  • 【面试】http
  • 获取泛型,泛型擦除,TypeReference 原理分析
  • springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列
  • C++ 代码实现鼠标右键注册菜单,一级目录和二级目录方法
  • SQLite 3 优化批量数据存储操作---事务transaction机制
  • [程序员] 表达的能力
  • rknn转换后精度差异很大,失真算子自纠
  • 【C语言】解决C语言报错:Stack Overflow
  • 【滚动哈希 二分查找】1044. 最长重复子串
  • webid、sec_poison_id、a1、web_session参数分析与算法实现
  • Qt|QWebSocket与Web进行通讯,实时接收语音流
  • 「51媒体」电视台媒体邀约采访报道怎么做?
  • Python提取PDF文本和图片,以及提前PDF页面中指定矩形区域的文本
  • C#实现边缘锐化(图像处理)
  • ffmpeg windows系统详细教程
  • 【单片机】MSP430G2553单片机 Could not find MSP-FET430UIF on specified COM port 解决方案
  • 每日一题——力扣104. 二叉树的最大深度(举一反三+思想解读+逐步优化)四千字好文
  • wpf textbox 有焦点 导致后台更新 前台不跟着改变
  • 数字化物资管理系统的未来:RFID技术的创新应用
  • 【docker】常用指令-表格整理
  • 洛谷——P2824 排序
  • echart在线图表demo下载直接运行
  • MLX5_SET_TO_ONES宏解析
  • SQL Server入门-SSMS简单使用(2008R2版)-1
  • 高考专业抉择探索计算机专业的未来展望及适合人群
  • windows安装spark