河南住房与建设厅网站,百度一下首页问问,深圳数字展厅,成都旅游攻略景点必去Java面向对象设计 - Java接口
什么是接口#xff1f;
Java中的接口定义了一个引用类型来创建抽象概念。接口由类实现以提供概念的实现。
在Java 8之前#xff0c;一个接口只能包含抽象方法。 Java 8允许接口具有实现的静态和默认方法。
接口通过抽象概念定义不相关类之间…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.Cloneablejava.io.Serializable和java.rmi.Remote都是标记接口。
功能接口
仅具有一个抽象方法的接口被称为功能接口。
多态性 - 一个对象多个视图
多态性是指对象具有多种形式的能力。
多态性是对象提供其不同视图的能力。
接口让我们创建一个多态对象。