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/