目录
🎈边走、边悟🎈迟早会好 |
一、接口
接口是 Java 语言中的一个抽象类型,用于定义对象的公共行为。它的创建关键字是 interface,在接口的实现中可以定义方法和常量,其普通方法是不能有具体的代码实现的,而在 JDK 8 之后,接口中可以创建 static 和 default 方法了,并且这两种方法可以有默认的方法实现,如下代码所示:
public interface Interface_1 {
int count = 1;
void sayHi();
// default 方法
default void print() {
System.out.println("Do print method.");
}
// static 方法
static void smethod() {
System.out.println("Do static method.");
}
}
创建一个类来实现以上接口:
public class InterfaceImpl_1 implements Interface_1 {
@Override
public void sayHi() {
System.out.println("Hi,I am InterfaceImpl 1.");
}
public static void main(String[] args) {
InterfaceImpl_1 inter = new InterfaceImpl_1();
inter.sayHi();
// 调用接口中 static 方法
InterfaceExample.smethod();
// 调用接口中的常量 count
System.out.println(InterfaceExample.count);
}
}
运行结果:
通过上述代码和执行结果我们可以得出以下结论:
- JDK 8 中接口可以定义 static 和 default 方法,并且这两种方法可以包含具体的代码实现。
- 实现接口要使用 implements 关键字。
- 接口不能直接实例化。
- 接口中定义的变量默认为 public static final 类型。
-
子类可以不重写接口中的 static 和 default 方法,不重写的情况下,默认调用的是接口的方法实现。
二、抽象类
抽象类和接口类似,它也是用来定义对象的公共行为的,并且它也不能直接实例化,抽象类的实现关键字为 abstract class,子类用 extends 关键字继承父类。
抽象类的使用如下:
public abstract class AbstractExample {
// 定义普通变量
int count = 2;
// 定义私有变量
private static int total = 10;
// 定义抽象方法
public abstract void methodA();
// 定义普通方法
public void methodB() {
System.out.println("Hi,methodB.");
}
}
接下来使用一个普通类继承上面的抽象类:
public class AbstractSon extends AbstractExample {
@Override
public void methodA() {
System.out.println("Hi,method A.");
}
public static void main(String[] args) {
AbstractSon abs = new AbstractSon();
// 抽象类中的变量重新赋值
abs.count = 666;
System.out.println(abs.count);
// 抽象类中的抽象方法
abs.methodA();
// 抽象类中的普通方法
abs.methodB();
}
}
以上程序的执行结果如下:
通过上述代码和执行结果可以得出以下结论:
- 抽象类使用 abstract 关键字声明。
- 抽象类中可以包含普通方法和抽象方法,抽象方法不能有具体的代码实现。
- 抽象类需要使用 extends 关键字实现继承。
- 抽象类不能直接实例化。
- 抽象类中属性控制符无限制,可以定义 private 类型的属性。
三、面试小记
1.接口和抽象类的共同点
- 都是用于实现多态性的机制。
- 都不能被实例化,只能被子类继承或实现。
- 都可以包含抽象方法,需要由子类提供具体的实现。
2.接口和抽象类的区别
- 语法上的区别:接口使用
interface
关键字进行声明,抽象类使用abstract
关键字进行声明。 - 实现方式的区别:一个类可以实现多个接口,但只能继承一个抽象类。
- 成员变量的区别:接口中只能定义常量(即静态 final 字段),而抽象类可以定义普通成员变量。
- 构造函数的区别:接口没有构造函数,而抽象类可以有构造函数。
- 方法实现的区别:接口中的方法默认都是公共的抽象方法,不包含具体的实现代码;而抽象类可以包含抽象方法和非抽象方法,其中抽象方法没有具体的实现,而非抽象方法有具体的实现代码。
- 使用场景的区别:接口适用于定义一组相关的操作,强调行为的规范;抽象类适用于定义一种通用的基础结构,强调子类的共性。
3.接口的优点
- 提供了一种规范,使得不同类可以实现相同的接口,从而实现多态性。
- 支持多继承,一个类可以实现多个接口。
4. 抽象类的优点
- 可以提供一些通用的方法和属性,减少子类的重复代码。
- 可以定义抽象方法,强制子类实现特定的行为。
5. 使用接口和抽象类的注意事项
- 接口中的方法默认都是公共的抽象方法,不需要使用
public abstract
关键字进行修饰。 - 抽象类中的抽象方法必须由子类实现,否则子类也必须声明为抽象类。
- 在设计时,应根据具体需求选择使用接口还是抽象类。如果只需要定义一组相关的操作,且可能有多个实现类,可以使用接口;如果需要定义一种通用的基础结构,且只有一个或少数几个子类,可以使用抽象类。
🌟感谢支持 听忆.-CSDN博客
🎈众口难调🎈从心就好 |