JavaSE学习:抽象类与接口详解

需积分: 3 2 下载量 33 浏览量 更新于2024-09-19 收藏 66KB DOC 举报
"Java SE学习笔记,涵盖了Java的基础知识,特别是关于抽象类和接口的讲解。" 在Java编程中,`javaSE学习笔记`强调了基础的Java SE知识,特别是第七章介绍了`抽象类与接口`的概念。这些是面向对象编程中的核心特性,允许我们设计出灵活且可扩展的代码结构。 ### 抽象类 抽象类是一种不能被实例化的类,它通过`abstract`关键字来定义。抽象类可以包含抽象方法(没有方法体的方法)和非抽象方法(有方法体的方法)。例如: ```java abstract class AbstractClass { // 抽象方法 abstract void abstractMethod(); // 非抽象方法 void nonAbstractMethod() { // 方法体 } } ``` 在抽象类中,至少有一个抽象方法就意味着整个类必须声明为抽象的。如果一个非抽象类继承了抽象类,它必须实现所有抽象方法,否则自身也需要声明为抽象类。抽象类可以有构造方法,用于子类实例化时调用。 ### 接口 接口(Interface)是Java中另一种形式的抽象,它只包含抽象方法和常量。接口使用`interface`关键字声明,并且所有方法默认都是抽象的(public abstract)。接口可以多继承,即一个接口可以继承多个其他接口。接口回调概念指的是通过接口调用实现该接口的类的方法。 ```java interface Interface { void interfaceMethod(); } class ImplementingClass implements Interface { public void interfaceMethod() { // 实现接口方法 } } ``` 在代码中,我们可以看到类`Char`作为一个抽象类,包含一个抽象方法`speak()`。`AA`和`BB`类分别继承了`Char`并实现了`speak()`方法。`Test`类中的`doSpeak()`方法接受`Char`类型的参数,实际上可以接受任何实现了`Char`接口的类的对象,这展示了Java的多态性。 在`Test`类的`main`方法中,我们看到`doSpeak()`方法接收了`AA`和`BB`类的对象,这是通过向上转型实现的。即使`doSpeak()`期望的是`Char`类型的参数,但传入子类对象也是合法的,因为它们都是`Char`的实例。这种做法简化了代码,并且在运行时会根据实际传入的对象类型执行相应的方法。 抽象类和接口都是Java中实现多态和代码抽象的重要工具。选择使用抽象类还是接口通常取决于设计需求:抽象类可以提供默认实现,而接口则强制实现特定方法。理解并熟练运用这两种机制对于编写高质量的Java代码至关重要。