Java中抽象类与接口,一篇就够啦

Java中抽象类与接口

Java中抽象类

  • 抽象类的定义

    定义:类的修饰符 abstract class 类名
    抽象类跟普通的类定义相比,就是在原来的基础上,加上一个abstract关键字。

    Java语言中,用abstract 关键字来修饰一个类时,这个类叫作抽象类。抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象。在面向对象领域,抽象类主要用来进行类型隐藏。(摘自百度百科

  • 为什么需要定义抽象类,而不是普通的类

    如果一个类,我们通常不会实例化,而且含了一些公共的属性和方法,我们就可以把它定义成抽象的。比如说人,就可以定义为抽象类Person。

  • 抽象类使用总结:

    1、在Java中使用abstract关键字定义的类就是抽象类,采用abstract关键字定义的方法就是抽象方法
    2、抽象类是不能被实例化的,就像现实世界中的人,其实是抽象的,张三才是具体的人的一个实例。
    3、抽象的方法只需在抽象类中,提供声明。抽象类中的抽象方法只有方法体,不需要在抽象类中进行实现。
    4、如果一个类中含有抽象方法,那么这个类必须定义成抽象类,当然,抽象类中,可以没有抽象方法。
    5、如果一个子类继承了抽象类,那么,抽象类中的所有的抽象方法必须被子类复写。如果在子类中不复写该抽象方法,那么必须将此方法声明为抽象方法。
    6、抽象类不能被final修饰,因为抽象类就是用来被继承的,而final修饰后的类,不能被继承,两者有冲突。
    7、抽象方法不能被final修饰,因为抽象方法就是用来被子类实现的,而final修饰的方法不能被覆盖,这和final有冲突。
    8、在抽象类中,我们可以将一些公共的属性变量放到抽象类中,也可以包含一些公用方法的实现。当然啦,抽象类使用的重要意义在于在抽象类中,我们可以定义一些抽象的方法,这样就会存在一个约束,而子类必须实现我们定义的方法,抽象类中的方法名称,子类又不能修改,这样就能很好的实现多态的机制,有了多态的机制,我们在运行期就可以动态的调用子类的方法。从而在运行期可以灵活的互换实现。

Java中接口

  • 接口定义:
    Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。(摘自百度百科

    这里的接口有两种含义:
    1、Java接口,Java语言中存在的结构,有特定的语法和结构;
    2、一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。

  • 接口使用总结:

    1、在Java中,接口使用interface声明类。
    2、接口可以看作是抽象类的一种特殊情况,在接口中只能定义抽象的方法和变量。
    3、接口中的方法,只能由子类通过implements关键字来实现。
    4、接口中的变量默认都是public static final类型的,不能更改,所以必须显示的初始化。
    5、接口中的方法默认都是public abstract的,方法的定义格式不能更改。
    6、接口不能被实例化,另外,接口中没有构造函数的概念。
    7、接口之间可以继承,但接口之间不能实现。
    8、如果一个类实现了接口,那么这个子类,必须实现接口中所有的方法。
    9、接口相比较类而言,类只能单继承,而接口可以多实现。

接口和抽象类的区别

  • 共同点:

    a) 接口和抽象类都不能被实例化

    b) 抽象类和接口都是用来抽象具体对象的,要面向接口(抽象)编程,而不要面向具体编程。虽然都进行了不同程度的抽象,但是接口的抽象级别最高。

  • 不同点:

    a) 抽象类要被子类继承,而接口是用来被子类实现的。

    b) 接口只能做方法声明,不能有方法的实现,抽象类中不仅可以作方法声明,也可以做方法实现。

    c) 实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。接口一方面解决java的单继承问题,另一方面,实现了强大的可插拔性(多态机制)。

    d) 抽象类可以有抽象方法、具体的方法和属性,而接口只能有抽象方法和不可变常量。接口里定义的变量只能是公共的静态的常量(public static final),抽象类中的变量是普通变量。

    e) 接口是设计的结果,抽象类是重构的结果。抽象类主要用来抽象类别,强调的是所属关系,接口主要用来抽象功能,强调的是特定功能的实现。

  • 使用总结

    a) 抽象类的存在主要是可以把公共的代码移植到抽象类中。

    b) 使用时,优先选择接口(因为继承抽象类后,此类将无法再继承,所以会丧失此类的灵活性)

如果这篇文章对你有帮助,欢迎给个star,您的支持,是博主创作的最大动力!

写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,希望尽自己的努力,做到更好,大家一起努力进步!

如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!

给自己的梦想添加一双翅膀,让它可以在天空中自由自在的飞翔!

猜你喜欢

转载自blog.csdn.net/smilehappiness/article/details/105616091