`
whujoy
  • 浏览: 933 次
  • 性别: Icon_minigender_1
  • 来自: 巴黎
最近访客 更多访客>>
社区版块
存档分类
最新评论

抽象类与接口

阅读更多

     想起第1次面试Adisseo时,项目主管问我“What is the difference between an Abstract Class and an Interface, when should these be used?” 当时就给他简单的讲了两句,感觉他不是很满意的样子...

 

     今天突然想起这个问题,就重新翻了翻资料,写点自己的理解吧。

 

     关于抽象类:最简单的来说,抽象类就是定义为abstract的类,它可以包含抽象方法,也可以不包含。抽象类不能实例化,但是可以有子类。举一个简单的关于抽象类和抽象方法的例子:

 

     假设我们通过创建一系列基于基类Animal的子类来对动物的行为进行建模。Animal可以有很多种不同的行为,比如flying,digging 和walking, 但是他们也有很多公共的行为就像eating 和sleeping。当这些操作通过不同形式表现出来时,最好就定义为抽象方法(强制子类去提供一个通用的实现)。让我们看下面这个非常简单的例子:

public abstract Animal{
    public void eat(Food food){
          //do something with food...
    }

    public void sleep(int hours){
         try{
              //1000 milliseconds*60 seconds* 60 minutes * hours
              Thread.sleep(1000*60*60*hours)
         }catch(InterruptedException ie){
              //ignore
         }
    }
    
     public abstract void makeNoise();
}

      现在,任何动物想要实例化必须实现 makeNoise() 方法,否则就无法创建该类的实例。

 

public Dog extends Animal{
   public void makeNoise(){
        System.out.println("Bark! Bark!");
   }
}

public Cat extends Animal{
     public void makeNoise()
         System.out.println("Miao! Miao!");
     }
}

      你一定在想为什么不把这个抽象类定义为一个接口, 然后让Dog和Cat 去实现这个接口。事实上,你当然可以这么做,但是你还需要去实现eat和sleep这两个方法。 通过使用抽象类,你就可以继承其他非抽象方法的实现,但是通过使用接口就不可以。接口只能被实现,是Can-Do-this的关系;但是抽象类可以被继承,是一种Is-A的关系。

 

      总的来说,如果你想要给一些没有关系的类提供公共方法,那么就请使用接口;如果这些类有很密切的层次关系,那么请使用抽象类。

 

 

 

 

 

分享到:
评论

相关推荐

    java 抽象类与接口的练习

    接口与抽象类的选择取决于具体的设计需求。如果关注的是行为的规范,且可能有多个实现者,那么接口是更好的选择。如果需要共享实现细节或者提供默认行为,抽象类则更为合适。 在压缩包中的"抽象类与接口"文件中,你...

    java抽象类与接口区别

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

    JAVA中抽象类与接口的区别

    在Java编程语言中,抽象类(Abstract Class)与接口(Interface)是实现抽象与多态性的两种关键机制。这两种机制的出现,极大地丰富了Java语言的面向对象特性,并为开发者提供了更为灵活的设计选择。下面将从多个...

    java抽象类与接口实例java抽象类与接口实例

    java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...

    java 抽象类与接口的区别

    理解抽象类与接口的区别并恰当运用,有助于提升代码的可扩展性和可维护性,使得软件设计更加灵活和面向对象。在进行Java编程时,应根据项目需求和设计原则,合理选择抽象类或接口来实现特定功能,以达到最佳的设计...

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

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

    抽象类与接口的区别

    ### 抽象类与接口的区别 #### 一、理解抽象类与接口的基本概念 在面向对象编程中,抽象类和接口都是重要的概念,用于描述共有的特性或行为,但它们在实现方式和用途上有所不同。 **抽象类**: - **定义**:抽象类...

    第7章 抽象类与接口.ppt

    这有助于实现接口与实现的解耦,提高代码的可维护性和扩展性。当一个类实现(implements)接口时,它必须提供接口中所有抽象方法的具体实现。Java允许一个类实现多个接口,以同时满足多种服务需求。 在示例中,`...

    实验5:Java抽象类与接口.doc

    Java 抽象类与接口实验报告 一、实验目的及要求 本实验的目的是掌握 Java 中的抽象类和接口的概念及其应用。通过本实验,学生将了解抽象类和接口的定义、特点及使用场景,并掌握如何使用抽象类和接口来描述不同的...

    Java抽象类与接口实验报告

    Java抽象类与接口实验报告

    C#抽象类与接口方法

    【C#抽象类与接口方法】在C#编程语言中,抽象类和接口是两种用于实现多态性和封装的关键概念,它们允许我们设计灵活、可扩展的代码结构。 抽象类是一种特殊的类,它不能被实例化,而是作为其他类的基类使用。抽象类...

    抽象类与接口的练习

    在“抽象类与接口”这个练习中,你将通过编写和调试代码,体验抽象类和接口在实际项目中的应用。通过对比分析,你会更清楚地了解它们的异同,提高代码设计能力。练习文件中的代码实例、注释和笔记将是你深入理解这些...

    第六章 抽象类与接口.zip

    第六章“抽象类与接口”探讨了这两种面向对象编程的关键特性。 首先,我们来理解抽象类。抽象类是一种不能被实例化的类,它通过关键字`abstract`声明。抽象类的主要目的是为其他类提供一个公共的基类,这些类可以...

    抽象类与接口中方法的相同点和不同点

    抽象类与接口中方法的相同点和不同点 抽象类和接口是Java编程语言中两种基础的编程概念,它们都是用于实现多态性和继承性的重要工具。在这篇文章中,我们将详细讨论抽象类和接口中方法的相同点和不同点。 抽象类 ...

    Java中抽象类与接口的比较.pdf

    Java 中抽象类与接口的比较 Java 语言中,抽象类(abstract class)和接口(interface)是两种支持抽象类定义的机制。抽象类和接口之间存在着许多相似性,但是也存在本质的区别。 一、 抽象类 在 Java 程序设计中...

    Java抽象类与接口课程案例的教学设计.pdf

    Java抽象类与接口是编程语言Java中的核心概念,它们在软件设计中扮演着至关重要的角色。在Java课程中,理解并掌握抽象类和接口对于学习者来说至关重要,因为这两个概念帮助程序员实现代码的复用、模块化和扩展性。 ...

Global site tag (gtag.js) - Google Analytics