- 接口的概念
- 接口是一种特殊的抽象类型,它只包含方法签名而没有方法体。接口定义了一组相关方法的契约,规定了实现类必须提供这些方法的具体实现。在Java中,接口使用
interface
关键字来定义。 - 例如,定义一个简单的接口
Drawable
,它规定了任何实现这个接口的类都必须有一个draw
方法:
public interface Drawable { void draw(); }
- 接口可以看作是一种规范或者模板,它使得不同的类可以遵循相同的行为标准。这就好比是各种电器都需要遵循一定的电源接口标准(如电压、插头形状等)才能正常接入电源工作一样。
- 接口是一种特殊的抽象类型,它只包含方法签名而没有方法体。接口定义了一组相关方法的契约,规定了实现类必须提供这些方法的具体实现。在Java中,接口使用
- 接口的实现
- 一个类可以通过
implements
关键字来实现接口。当一个类实现接口时,它必须实现接口中定义的所有方法。 - 例如,有一个
Circle
类实现Drawable
接口:
public class Circle implements Drawable { @Override public void draw() { System.out.println("Drawing a circle"); } }
- 这里
Circle
类实现了draw
方法,满足了Drawable
接口的要求。如果没有实现draw
方法,编译器会报错。这种强制实现的机制确保了实现类都遵循接口所定义的行为规范。
- 一个类可以通过
- 接口中的变量
- 接口中的变量默认是
public static final
的,这意味着它们是常量。 - 例如:
public interface Constants { int MAX_VALUE = 100; }
- 在其他类中,可以通过接口名来访问这些常量,如
System.out.println(Constants.MAX_VALUE);
。这种常量的定义方式使得在多个实现类之间可以共享一些固定的值,并且保证这些值不会被随意修改。
- 接口中的变量默认是
- 接口的多继承
- 与类不同,接口可以多继承。一个接口可以继承多个其他接口。
- 例如:
public interface Movable { void move(); } public interface Resizable { void resize(); } public interface Shape extends Movable, Resizable { // 可以继承多个接口的方法签名 }
- 当一个类实现
Shape
接口时,它需要同时实现move
和resize
方法,因为Shape
接口继承了Movable
和Resizable
接口的方法签名。这为定义复杂的行为规范提供了方便,使得接口可以更好地组合和扩展功能。
- 接口与多态
- 接口是实现多态的重要手段。通过接口,不同的实现类可以被当作接口类型来使用。
- 例如,有一个方法接受
Drawable
接口类型的参数:
public static void drawSomething(Drawable d) { d.draw(); }
- 可以将
Circle
类的实例或者其他实现了Drawable
接口的类的实例传递给这个方法,如:
Circle circle = new Circle(); drawSomething(circle);
- 这样就实现了多态。在运行时,根据实际传入的对象类型来决定调用哪个
draw
方法的实现,这种灵活性使得代码更加可维护和可扩展。如果后续需要添加新的可绘制的图形类,只要实现Drawable
接口,就可以在drawSomething
方法中使用,而不需要修改方法内部的代码结构。