abstract class && interface

Last updated on November 15, 2023 am

抽象类(abstract class)和接口(interface)有什么区别?

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// 抽象类
public abstract class Animal {
// 非抽象方法
public void eat() {
System.out.println("Animal is eating.");
}

// 抽象方法
public abstract void makeSound();
}

// 实现抽象类的子类
public class Dog extends Animal {
// 实现抽象方法
public void makeSound() {
System.out.println("Dog is barking.");
}
}

// 接口
public interface Shape {
// 接口中的常量
public static final double PI = 3.14;

// 抽象方法
public double getArea();

// 抽象方法
public double getPerimeter();
}

// 实现接口的类
public class Circle implements Shape {
private double radius;

public Circle(double radius) {
this.radius = radius;
}

// 实现接口的抽象方法
public double getArea() {
return PI * radius * radius;
}

// 实现接口的抽象方法
public double getPerimeter() {
return 2 * PI * radius;
}
}

区别:

抽象类:

  • 可以包含非抽象方法和抽象方法;
  • 可以包含属性和构造方法;
  • 可以被继承,且一个类只能继承一个抽象类;
  • 抽象方法必须被子类实现;
  • 可以有访问修饰符和static、final等修饰符。

接口:

  • 只能包含抽象方法和常量;
  • 可以被类实现,一个类可以实现多个接口;
  • 接口中的方法默认为public,且不能有方法体;
  • 接口中的属性默认为public static final,且不能被修改;
  • JDK8之后,接口中可以有默认方法和静态方法。
  • JDK9 在接⼝中引⼊了私有⽅法和私有静态⽅法。

从设计层面来说:

  • 抽象类是对类的抽象,是一种模板设计;
  • 接口是对行为的抽象,是一种行为的规范。

abstract class && interface
https://wlei224.gitee.io/2023/10/07/abstractandinterface/
Author
WLei224
Posted on
October 7, 2023
Updated on
November 15, 2023
Licensed under