抽象类和接口

抽象类和接口

抽象类

  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实现多态

不同点

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

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

抽象类:

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

接口:

  • 用于定义行为规范和契约。
  • 定义了一组方法的签名,而不提供这些方法的具体实现。
  • 适合用于定义多个类之间的行为一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值