欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 【Java】接口和抽象类

【Java】接口和抽象类

2025/7/3 21:52:35 来源:https://blog.csdn.net/XiugongHao/article/details/144249387  浏览:    关键词:【Java】接口和抽象类

1. 定义方式

  • 抽象类:使用 abstract 关键字定义,抽象类可以有抽象方法(没有方法体)和非抽象方法(有方法体)。
  • 接口:使用 interface 关键字定义,接口只能包含抽象方法,直到 Java 8 才引入了默认方法(default)和静态方法(static)。
// 抽象类
abstract class Animal {abstract void sound();  // 抽象方法void breathe() {        // 非抽象方法System.out.println("Breathing...");}
}// 接口
interface Animal {void sound();  // 默认是抽象方法default void breathe() {  // 默认方法System.out.println("Breathing...");}
}

2. 方法的实现

  • 抽象类:可以有方法实现,也可以没有方法实现。即可以包含抽象方法和非抽象方法。
  • 接口:所有方法默认都是抽象的,直到 Java 8 引入默认方法,接口可以包含默认实现的方法,但只能是 defaultstatic

3. 成员变量

  • 抽象类:可以包含实例变量(成员变量),并且可以是不同的访问修饰符(privateprotectedpublic)。抽象类的成员变量也可以有初始值。
  • 接口:接口中的成员变量默认是 public static final,即常量,必须初始化,不能修改。
// 抽象类成员变量
abstract class Animal {protected String name; // 可以是实例变量
}// 接口成员变量
interface Animal {int AGE = 10; // 默认是 public static final
}

4. 构造函数

  • 抽象类:可以有构造函数,子类可以调用父类的构造函数来初始化父类的成员变量。
  • 接口:不能有构造函数,接口不能被实例化。

5. 继承/实现

  • 抽象类:一个类只能继承一个抽象类(单继承),但可以实现多个接口。
  • 接口:一个类可以实现多个接口(多实现),这是 Java 通过接口支持多继承的一种方式。
// 类继承抽象类
class Dog extends Animal {void sound() {System.out.println("Woof");}
}// 类实现接口
class Dog implements Animal {public void sound() {System.out.println("Woof");}
}

6. 多继承的支持

  • 抽象类:不支持多继承,一个类只能继承一个抽象类。
  • 接口:支持多继承,一个类可以实现多个接口。
// 抽象类的单继承
abstract class Animal {abstract void sound();
}abstract class Pet {abstract void play();
}// 错误的多继承示例
// class Dog extends Animal, Pet {} // 编译错误// 接口的多实现
interface Animal {void sound();
}interface Pet {void play();
}class Dog implements Animal, Pet {public void sound() {System.out.println("Woof");}public void play() {System.out.println("Play fetch");}
}

7. 用途

  • 抽象类:用于描述“类”的通用行为,通常是相似的类之间的共性。适用于当不同的类共享某些方法的实现时,抽象类就成为更合适的选择。
  • 接口:用于描述“能力”,如某个类的行为规范。接口更加灵活,适用于定义某些功能或行为的规范,不关心类的实现细节。

8. 默认方法(Java 8+)

  • 抽象类:没有类似接口中的 default 方法,抽象类的具体方法通常是类实现时需要覆盖的。
  • 接口:Java 8 引入了 default 方法,允许在接口中提供方法的默认实现,以便向后兼容已有的接口。
interface Animal {default void breathe() {  // 默认方法System.out.println("Breathing...");}
}

总结

特性抽象类接口
关键词abstractinterface
方法实现可以有抽象方法和非抽象方法默认全是抽象方法,Java 8+ 有默认方法
成员变量可以有成员变量默认是 public static final 常量
构造函数可以有构造函数不能有构造函数
继承/实现只能继承一个类(单继承)可以实现多个接口(多实现)
用途描述类的共性行为描述对象的能力(接口化的功能)
访问修饰符可以有多种访问修饰符默认 public

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词