抽象类
-
抽象类与抽象方法:
- 抽象类用于描述一个对象的基本特征,但可能不足以完全描述一个对象,因此不能被实例化。
- 抽象类使用
abstract
关键字声明,例如:public abstract class Animal { ... }
。 - 抽象方法也是使用
abstract
关键字声明的,并且没有方法体,例如:public abstract void makeSound();
。 - 抽象方法必须在子类中被实现。
-
与普通类的区别:
- 抽象类不能被实例化,只能被继承。
- 抽象类可以包含抽象方法和非抽象方法。
接口
-
接口:
- 接口定义了一组方法,但不提供实现。它是一种规范和标准,约束其实现类必须提供这些方法的具体实现。
- 接口使用
interface
关键字声明,例如:public interface Drawable { ... }
。 - 类使用
implements
关键字来实现接口,例如:public class Circle implements Drawable { ... }
。
-
接口的特点:
- 接口表示一种约定,体现了约定和实现相分离的原则。
- 接口中的方法默认是
public
和abstract
的。 - 一个类可以实现多个接口,体现了多继承的概念。
抽象类与接口的区别
-
代码复用 vs 代码扩展:
- 抽象类利于代码的复用,因为它可以包含成员变量和已实现的方法。
- 接口利于代码的扩展和维护,因为它只包含方法的声明,不包含实现。
-
实现方式:
- 一个类只能继承一个抽象类,但可以实现多个接口。
总结
抽象类和接口都是面向对象编程中用于实现多态性的重要工具。抽象类提供了一种在类层次结构中共享代码的方式,而接口提供了一种定义类之间协议的方式,允许不同的类以不同的方式实现相同的行为。