-
接口与类的区别:
- **接口(interface)**定义了一组抽象方法的声明,但没有具体的实现。它们用于描述类具有什么样的功能,而不关注具体实现。
- **类(class)**可以包含方法的实现和实例字段,用于定义对象的状态和行为。
-
接口的扩展(继承):
- 接口可以通过
extends
关键字扩展其他接口,以继承其方法声明和常量。 - 示例:
public interface A { void methodA(); } public interface B extends A { void methodB(); }
- 在上述例子中,接口
B
扩展了接口A
,因此B
包含了methodA()
的声明。
- 接口可以通过
-
类的实现:
- 类可以通过
implements
关键字实现接口,从而提供接口声明的具体实现。 - 示例:
public class MyClass implements B {
@Override public void methodA()
{ // 实现 methodA() }
@Override public void methodB() { // 实现 methodB() } }
- 在这里,
MyClass
类实现了接口B
,必须提供methodA()
和methodB()
的具体实现。
- 类可以通过
因此,接口在 Java 中用于定义抽象的行为规范,并支持多继承接口的特性,但不能继承类。
在Java中,interface
(接口)是一种抽象类型,它定义了一组方法的声明,但没有具体的实现。接口可以包含方法、常量和默认方法的声明,但不能包含实例字段(即变量)或实例方法的实现。
声明接口
接口使用 interface
关键字来声明,语法如下:
public interface MyInterface { // 声明方法
void method1();
int method2(String str);
// 声明常量(隐式为 public static final)
int MAX_COUNT = 100; // 默认方法(Java 8 引入)
default void defaultMethod() {
System.out.println("Default method implementation"); } // 静态方法(Java 8 引入) static void staticMethod()
{ System.out.println("Static method in interface"); } }
实现接口
一个类通过 implements
关键字来实现一个接口。一个类可以实现多个接口,但只能继承一个类。
public class MyClass implements MyInterface { // 实现接口中的抽象方法
@Override public void method1() { // 实现方法体 }
@Override public int method2(String str) { // 实现方法体 return str.length(); } // MyClass 还可以覆盖默认方法或不覆盖 }
使用接口
接口通常用于定义方法的契约,以便实现类可以提供特定的行为。在代码中,可以通过接口类型引用实现类的实例,从而实现多态性。
MyInterface obj = new MyClass();
obj.method1(); // 调用实现类的 method1() 方法
int length = obj.method2("Hello"); // 调用实现类的 method2() 方法
// 调用接口的默认方法
obj.defaultMethod();
// 调用接口的静态方法 MyInterface.staticMethod();
主要特点
- 抽象性:接口不能直接实例化,只能通过实现它的类来实例化。
- 多继承:一个类可以实现多个接口,但只能继承一个类。
- 默认方法和静态方法:接口可以包含默认方法和静态方法的实现,用于提供方法的默认行为或工具方法。
接口在Java中被广泛用于实现多态性和规范化类的行为。