Java面向对象设计 – Java接口类型 接口定义了一个新的引用类型。 我们可以使用接口类型来声明变量,在方法中声明参数类型,作为方法的返回类型等。 interface Shape { void draw(); } public class Main { // interface type as instance variable private Shape myShape; // interface type as parameter type for a constructor public Main(Shape s) { this.myShape = s; } // interface type as return type of a method public Shape getShape() { return this.myShape; } // interface type as parameter type for a method public void setShape(Shape s) { this.myShape = s; } public void letItSwim() { // interface type as a local variable Shape locaShape = null; locaShape = this.myShape; // interface variable can invoke methods // declared in the interface and the Object class locaShape.draw(); } } 注意 接口类型的变量是指其类实现该接口的内存中的对象。 我们可以使用接口类型的变量或直接使用接口名称来访问接口中声明的任何常量字段。 最好使用接口名访问接口的常量。常量。 我们可以使用接口类型的变量来调用接口中声明的任何方法。 接口类型的变量可以调用java.lang.Object类的任何方法。 默认情况下,接口类型的实例或静态变量将初始化为null。
Java面向对象设计 – Java接口字段 一个接口可以有三种类型的成员: 常量字段 抽象,静态和默认方法 静态类型作为嵌套接口和类 一个接口不能有可变的实例和类变量。与类不同,接口不能被实例化。接口的所有成员都是隐式公开的。 常量字段声明 我们可以在接口中声明常量字段,如下所示。它声明一个名为Choices的接口,它有两个字段的声明:YES和NO。两者都是int数据类型。 public interface Choices { public static final int YES = 1; public static final int NO = 2; } 接口中的所有字段都是隐式的public,static和final。 Choices接口可以声明如下,而不改变其含义: public interface Choices { int YES = 1; int NO = 2; } 您可以使用点形式的形式访问界面中的字段 <interface-name>.<field-name> 您可以使用Choices.YES和Choices.NO访问Choices界面中的YES和NO字段的值。 下面的代码演示了如何使用点符号来访问接口的字段。 public class ChoicesTest { public static void main(String[] args) { System.out.println("Choices.YES = " + Choices.YES); System.out.println("Choices.NO = " + Choices.NO); } } 接口中的字段总是最终的,无论关键字final是否在其声明中使用。我们必须在声明时初始化一个字段。 我们可以使用编译时或运行时常量表达式来初始化字段。由于final字段只赋值一次,因此除了声明之外,我们不能设置接口字段的值。 以下代码显示了接口的一些有效和无效字段声明: public interface ValidFields { int X = 10; int Y = X; double N = X + 10.5; boolean YES = true; boolean NO = false; Test TEST = new Test(); } 使用接口中字段名称中的所有大写字母表示它们是常量是一种约定。 接口的字段总是公共的。
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...