抽象类和接口

抽象类和接口

抽象类

  public abstract class Animal {
      protected String name;

      public Animal(String name) {
          this.name = name;
      }

      public abstract void makeSound();  // 抽象方法
      public void eat() {
          System.out.println(name + " is eating.");
      }
  }

接口

  public interface Animal {
//    public static final String name = "Dog";
      String name = "Dog"; // 静态常量
//    public abstract void makeSound();
      void makeSound();  // 抽象方法

      // Java 8 
      default void sleep() {  // 默认方法
          System.out.println("Zzz...");
      }
      static void greet() {  // 静态方法
          System.out.println("Hello!");
      }
      // Java 9
      private void innerMethod() {  // 私有方法,用于支持接口中其他方法
      System.out.println("emm...");
    }     
  }

相同点

  1. 抽象性
    都可以包含抽象方法,不能直接实例化。需要派生子类(抽象类被子类继承,抽象方法被子类实现)
  2. 多态性
    抽象类通过被子类extends实现多态,接口通过被子类implement实现多态

不同点

  • 继承与实现:
    一个类只能继承一个抽象类。
    一个类可以实现多个接口。

  • 思想
    抽象类本质是类,适合做父类模板
    接口更适合做功能的解耦合

抽象类:

  • 适合做父类模板。
  • 可以包含构造器、字段、抽象方法和非抽象方法。
  • 适合定义一系列相关类的公共行为和状态。

接口:

  • 用于定义行为规范和契约。
  • 定义了一组方法的签名,而不提供这些方法的具体实现。
  • 适合用于定义多个类之间的行为一致性。
posted @ 2024-08-11 22:10  Sherioc  阅读(16)  评论(0编辑  收藏  举报