想起第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编程中,抽象类(Abstract Class)与接口(Interface)都是实现抽象的关键工具。它们各自有着独特的优势和适用场景,掌握这两者的区别有助于开发者更好地设计系统...
在Java编程语言中,抽象类(Abstract Class)与接口(Interface)是实现抽象与多态性的两种关键机制。这两种机制的出现,极大地丰富了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.总结
### 抽象类与接口的区别 #### 一、理解抽象类与接口的基本概念 在面向对象编程中,抽象类和接口都是重要的概念,用于描述共有的特性或行为,但它们在实现方式和用途上有所不同。 **抽象类**: - **定义**:抽象类...
这有助于实现接口与实现的解耦,提高代码的可维护性和扩展性。当一个类实现(implements)接口时,它必须提供接口中所有抽象方法的具体实现。Java允许一个类实现多个接口,以同时满足多种服务需求。 在示例中,`...
Java 抽象类与接口实验报告 一、实验目的及要求 本实验的目的是掌握 Java 中的抽象类和接口的概念及其应用。通过本实验,学生将了解抽象类和接口的定义、特点及使用场景,并掌握如何使用抽象类和接口来描述不同的...
Java抽象类与接口实验报告
【C#抽象类与接口方法】在C#编程语言中,抽象类和接口是两种用于实现多态性和封装的关键概念,它们允许我们设计灵活、可扩展的代码结构。 抽象类是一种特殊的类,它不能被实例化,而是作为其他类的基类使用。抽象类...
在“抽象类与接口”这个练习中,你将通过编写和调试代码,体验抽象类和接口在实际项目中的应用。通过对比分析,你会更清楚地了解它们的异同,提高代码设计能力。练习文件中的代码实例、注释和笔记将是你深入理解这些...
第六章“抽象类与接口”探讨了这两种面向对象编程的关键特性。 首先,我们来理解抽象类。抽象类是一种不能被实例化的类,它通过关键字`abstract`声明。抽象类的主要目的是为其他类提供一个公共的基类,这些类可以...
抽象类与接口中方法的相同点和不同点 抽象类和接口是Java编程语言中两种基础的编程概念,它们都是用于实现多态性和继承性的重要工具。在这篇文章中,我们将详细讨论抽象类和接口中方法的相同点和不同点。 抽象类 ...
Java 中抽象类与接口的比较 Java 语言中,抽象类(abstract class)和接口(interface)是两种支持抽象类定义的机制。抽象类和接口之间存在着许多相似性,但是也存在本质的区别。 一、 抽象类 在 Java 程序设计中...
Java抽象类与接口是编程语言Java中的核心概念,它们在软件设计中扮演着至关重要的角色。在Java课程中,理解并掌握抽象类和接口对于学习者来说至关重要,因为这两个概念帮助程序员实现代码的复用、模块化和扩展性。 ...