`
guomingzhang2008
  • 浏览: 160872 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

接口和抽象类的区别总结

    博客分类:
  • Java
阅读更多
接口内可以有成员,凡是接口内声明的变量,就算不用任何修饰符,都默认是public stastic final的。



抽象类:包括大多数派生类所具有的功能(具体实现类似)
接口:包括某些类(甚至不相关的类)所类似的功能(具体实现可以不同)
抽象类:家用电器
派生类:冰箱,洗衣机,电视,收音机...
接口:开关
实现接口的类:电视,收音机,水龙头,马桶...

关于这个,其实全部用接口也不是不可以,但是如果全部用接口,那么所有的继承类都将自己实现所有的方法,这个有时候是不必要的,将大大的增加程序员的工作量以及设计上的错误
比如有个接口Person,有个方法叫做sayHello,只是简单的打印一个sayHello(表示打个招呼吧),Person接口下面有两个子类SomeConcretePerson1,SomeConcretePerson,当然这两个子类也会继承这两个方法,但是由于是Person是接口,两个子类必须自己实现打印sayHello,这个明显会重复代码,何不在把Person改为抽象类,实现sayHello方法呢?

abstract class Person{
   sayHello(){System.out.println("hello!")};
}
SomeConcretePerson1 extends Person{};
SomeConcretePerson2 extends Person{};
------------------------------------
interface Person{
   sayHello();
}
SomeConcretePerson1 extends Person{
    sayHello(){System.out.println("hello!")};//这里明显跟下面是重复的代码
};
SomeConcretePerson2 extends Person{
    sayHello(){System.out.println("hello!")};//如果不小心还有可能两个打印不同的东西
}

所以可以看到java api很多类顶层只是一个抽象类而不是接口,比如Object
每个类都是继承Object,如果Object是一个接口,想想你自己写的类将要实现多少在Object里面定义的方法?没有这个必要了
还有一个很好的例子是MouseListener跟MouseAdapter,前者是接口,后者是抽象类,该抽象类是继承MouseListener,并且所有方法体为空,在具体应用上,由于implements MouseListener将必须实现所有的方法,有时候可能并不需要,可能只需要相应一个mouseClicked事件就够了,其他事件不用管,这时候你只需要extends MouseAdapter,然后overridemouseClicked方法即可,这个就是很好的应用了,不用全部实现接口的所有方法

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/guomingzhang2008/archive/2009/10/05/4632877.aspx
分享到:
评论

相关推荐

    Java 接口和抽象类区别

    总结来说,Java接口和抽象类都是软件设计中的重要工具,它们在EJB等企业级应用中发挥着关键作用。理解它们的区别和用法,有助于编写更高效、可维护的代码,并且能更好地利用Java的面向对象特性。通过深入学习EJB的...

    抽象类与接口的区别

    总结而言,选择抽象类还是接口取决于具体的应用场景和需求。在设计系统架构时,理解并正确使用这两种工具是非常重要的。抽象类和接口的合理运用能够帮助我们更好地组织代码,提高代码的复用性和可维护性。

    java抽象类与接口区别

    ### Java抽象类与接口的区别 #### 一、引言 在Java编程中,抽象类(Abstract Class)与接口(Interface)都是实现抽象的关键工具。它们各自有着独特的优势和适用场景,掌握这两者的区别有助于开发者更好地设计系统...

    Java开发接口和抽象类的区别共2页.pdf.zip

    总结,Java中的接口和抽象类是设计模式和面向对象编程的重要工具,它们在灵活性、扩展性和代码组织方面都有各自的优势。根据具体需求和场景选择使用接口或抽象类,可以帮助我们编写更加清晰、可维护的代码。

    接口,内部类,抽象类概念和区别

    总结,接口、内部类和抽象类是Java中重要的面向对象设计工具,它们各有特点,开发者应根据需求灵活选择和组合使用,以实现高效且易于维护的代码结构。在阅读和理解他人代码时,理解这些概念及其差异同样至关重要。

    java中接口与抽象类的详细分析与比较

    总结来说,理解和掌握Java中的接口和抽象类是成为一名优秀Java开发者的关键。选择使用哪种方式取决于具体的需求和设计目标,灵活运用它们可以帮助我们编写出更高效、更易于维护的代码。通过阅读"java中接口与抽象类...

    抽象类和接口的详细区别和联系

    ### 抽象类和接口的详细区别和联系 在面向对象编程中,抽象类与接口是两种非常重要的概念,它们都是实现多态性的方式之一,但在使用场景、语法特性和设计哲学等方面存在明显的不同。本篇文章将深入探讨这两者的区别...

    抽象类和接口实验报告.doc

    抽象类和接口实验报告

    Java抽象类与接口实验报告

    Java抽象类与接口实验报告

    接口和抽象类的区别_--相信你看完不会再混淆了

    尽管抽象类和接口都可以用于定义类的公共行为,但它们之间存在一些重要的区别: 1. **实现约束**: - **接口**:可以被多个类实现,这支持了多继承的概念。 - **抽象类**:只能被单个类继承,因此不支持多继承。 ...

    接口与抽象类

    本文将详细探讨接口与抽象类的区别,并结合实际编程场景来分析何时使用接口、何时选择抽象类。 #### 二、接口的基本概念 接口是一种特殊的抽象类型,它只定义方法、属性、索引器和事件等成员的签名,但不提供这些...

    简述抽象类和接口的区别-java接口和抽象类异同.docx

    ### 抽象类与接口的区别 #### 一、定义与特性 **抽象类**: - 抽象类是一种特殊的类,它可以包含抽象方法(没有具体实现的方法)和具体方法(有具体实现的方法)。 - 抽象类不能被实例化,只能作为其他类的父类。 ...

    JAVA 继承基本类、抽象类、接口区别与联系

    本文将详细介绍Java中的基本类、抽象类以及接口的概念,并分析它们之间的区别和联系。 #### 二、基本类 **定义**:基本类是指具体实现了一定功能的类,它包含了具体的属性和方法。在Java中,所有类都是通过`class`...

    Java源代码:抽象类和接口

    总结来说,抽象类和接口都是用于实现多态性的工具,但它们有明显的区别: 1. 抽象类可以包含非抽象方法和字段,而接口仅包含常量和抽象方法。 2. 一个类可以继承一个抽象类,但可以实现多个接口。 3. 抽象类提供了一...

    抽象类和接口

    #### 四、抽象类与接口的区别 1. **继承与实现**: - 抽象类使用继承(`extends`),而接口使用实现(`implements`)。 - Java不支持多继承,但一个类可以实现多个接口。 2. **方法实现**: - 抽象类可以包含...

    Java继承_抽象类与接口的应用.

    1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结

    C#抽象类与接口方法

    总结来说,C#中的抽象类和接口是面向对象编程的重要工具,它们帮助我们设计出模块化、可扩展的代码。抽象类提供了一个基本结构,并强制子类实现特定的方法,而接口则定义了对象必须遵循的规范。理解并合理运用这两者...

    Java实验7抽象类和接口.pdf

    在 Java 编程语言中,抽象类和接口是两种基本的编程概念,它们都是定义类的蓝图,但它们之间有着本质的区别。 一、抽象类 抽象类是一种特殊的类,它不能被实例化,必须被继承。抽象类提供了一种定义类的模板,它...

    Java基础知识:接口和抽象类

    总结:接口和抽象类是 Java 中实现抽象和封装的重要工具。接口定义了一组方法的规范,而抽象类提供了一种无法实例化的类,用于定义抽象和具体方法。通过合理使用接口和抽象类,我们可以更好地组织和设计我们的 Java ...

    抽象类和接口的区别

    在Java语言中,抽象类(Abstract Class)和接口(Interface)都是用于实现面向对象编程中的抽象性的重要工具,但它们之间存在一些本质的区别。 1. **抽象类**: - 抽象类是一种特殊的类,它不能被实例化。 - 可以...

Global site tag (gtag.js) - Google Analytics