码迷,mamicode.com
首页 > 其他好文 > 详细

抽象类和接口

时间:2020-02-01 21:05:20      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:pre   需要   oid   结构   多个   demo   stat   区别   int   

抽象类(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继承抽象类
局限 一个子类可以实现多个接口 一个子类只能继承一个抽象类

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

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

抽象类和接口

标签:pre   需要   oid   结构   多个   demo   stat   区别   int   

原文地址:https://www.cnblogs.com/Zhouge6/p/12250049.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!