抽象类和接口

Posted zhouge6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类和接口相关的知识,希望对你有一定的参考价值。

抽象类(abstract)

  • 包含一个抽象方法的类必须是抽象类

  • 抽象类和抽象方法都是用abstract关键字声明

  • 抽象方法只需要声明而不需要实现

  • 抽象类必须被子类继承

    • 子类不是抽象类时必须重写父类中的所有抽象方法

    • 子类是抽象类时仍可以继续声明成抽象方法

      public abstract class Hero{
          public abstract boolean canFight(Hero hero);
          public abstract void fight(Hero hero);
      }
      
      /** 子类不是抽象类*/
      public class Worrior extends Hero{
          @Overrride
          public boolean canFight(Hero hero){
              return false;
          }
          @Override
          public void fight(Hero hero){}
      }
      
      /** 子类是抽象类*/
      public abstract class LongRangerHero extends Hero{
          //继续作为抽象方法,也可以省略
          public abstract void fight(Hero hero);
          @Override
          public boolean canFight(Hero hero){
              return true;
          }
      }
      
      /** 子类不是抽象类*/
      public class Ranger extends LongRanger{
          @Override
          public void fight(Hero hero){}
      }
      
      /** 子类不是抽象类*/
      public class Magical extends LongRangerHero{
          @Override
          public void fight(Hero hero){}
      }
  • 抽象类不可以用new实例化

接口(interface)

语法

修饰符 interface 接口名
    如:public interface Demo{}
类 implements 接口
  • 接口是一种与类相似的结构,只包含常量和抽象方法
  • 目的是指明相关或不相关类的多个对象的共同行为(功能)
  • 在Java中,接口看做是一种特殊的类,与抽象类类似,不能使用new实例化
  • 接口必须由其他类实现,实现类不能实现的方法可以继续标识为abstract
  • 接口中所有的数据都是public static final,所有方法都是public abstract,默认情况下可以省略这些关键字
  • 在Java8中,接口中也可以有方法的实现

接口的优点

使设计和实现完全分离,能够更自然使用多态,可以更容易搭建程序框架,可以更容易更换实现

接口和抽象类的比较

区别 接口 抽象类
定义关键字 interface abstract class
组成 全局常量,抽象方法 常量,变量,抽象方法,普通方法,构造方法
权限 只能是public 可以使用各种权限
关系 接口不能够继承抽象类,但可以继承多接口 一个抽象类可以实现多个接口
使用 子类使用implements实现接口 子类使用extends继承抽象类
局限 一个子类可以实现多个接口 一个子类只能继承一个抽象类

抽象类的缺点:一个子类只能继承一个抽象类,存在单继承的局限

实际开发中,抽象类和接口都可以用的情况下,优先使用接口,避免单继承的局限

以上是关于抽象类和接口的主要内容,如果未能解决你的问题,请参考以下文章

聊聊抽象类和接口

抽象类和接口的异同

抽象类和接口在一起?

java 抽象类和接口的差别

抽象类和接口

Java学习笔记—抽象类和接口