zoukankan      html  css  js  c++  java
  • 接口和抽象类有什么区别?

     

    抽象类(实体)和接口是支持抽象类(概念上的)定义的两种机制,两者具有很大的相似性,甚至有时候是可以互换的,但同时也有很大的区别.

    具体而言,接口是公开的,里面不能有私有的方法或变量,所有的方法或变量都是提供给外部使用的,而抽象类里可以有私有的方法或变量,如果一个类中包含抽象的方法,那么这个类就是抽象类.在java中,可以通过把类或者类中的方法用abstract(只能用来修饰类或方法,不能修饰变量)来修饰,表示是这个类是以抽象类或这个方法是一个抽象方法.接口就是一个方法的集体,接口中所有的方法都没方法体,在java中接口通过interface来修饰.

    包含一个或多个抽象方法的类就必须被声明为抽象类,抽象类可以声明方法的存在,而不去实现它,被声明为抽象的方法不能包含方法体.抽象类的子类中,实现方法必须含有相同或更高级别的访问权限.抽象类在使用的过程中不能被实例化,但是可以创建一个对象使其指向具体的子类对象.抽象类的子类为父类中所有的抽象方法提供具体的实现,否则子类也是抽象类.接口可以被看作是抽象类的变体,接口中所有的方法都是抽象的,可以通过接口来间接地实现多重继承.接口中的成员变量都是static final类型的,由于抽象类可以包含部分方法的实现,所以,在一些场合下抽象类抽象类比接口存在更多的优势.

    接口与抽象类的相同点如下:

    1.都不能被实现;

    2.接口的实现类或抽象类的子类都只有实现了接口或抽象类的方法后才能被实例化.

    接口与抽象类的不同点:

    1.接口只有定义,不能实现方法,而抽象类可以有定义,也可以有方法实现.

    2.实现接口的关键词是implements,继承抽象类的关键词是extends.一个类可以实现多个接口,但只能继承一个抽象类,因此使用接口可以间接的实现多继承的目的.

    3.接口强调特定功能的实现,起设计理念是"like-a"的关系,而抽象类的继承理念是"is-a"的关系.

    4.接口种的成员变量必须是public static final的,而且必须有初始值,接口的所有方法必须是public abstract的,而且只能被这两个关键词修饰;而抽象类可以有自己的数据成员变量,也可以有非抽象的成员方法,而且抽象类中的成员变量默认是缺省访问修饰,也可以是public/protected/private,这些成员变量在子类中可以被重新赋值.抽象类的抽象方法不能被private/static/synchronized和native修饰,同时方法不带"{}",并以";"结尾.所以上功能需要累积时使用抽象类,不需要累积时使用接口.

    5.接口被用以定义比较常用功能,便于日后维护或者添加和删除方法,而抽象类更倾向于充当公共类的角色,不适用于日后重新对里面的代码进行修改.

  • 相关阅读:
    HDU 5608
    win10 UWP 九幽数据分析
    win10 UWP 九幽数据分析
    win10 UWP 九幽数据分析
    博客发在win10.me
    博客发在win10.me
    博客发在win10.me
    win10 UWP 圆形等待
    win10 UWP 圆形等待
    win10 UWP 圆形等待
  • 原文地址:https://www.cnblogs.com/chuanyueinlife/p/8379204.html
Copyright © 2011-2022 走看看