接口和抽象类的区别。(总结)
提供抽象层,有助于消除重复。
简要:
- 接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法;
- 类可以实现很多个接口,但是只能继承一个抽象类;
- 类如果要实现一个接口,并且这个类不是抽象类(抽象类例外),那它必须要实现接口声明的所有方法。类不一定要实现抽象类中的所有抽象方法,特殊的是该类本身为抽象类。
- Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
- 接口中基本数据类型为final static(默认),而抽类象可以不是。
- 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
(另一个精彩回答:接口和抽象类的概念不一样。接口是对事物动作的抽象,抽象类是对事物根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它。
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
第一点、接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类;
第二点、接口可以多继承,抽象类不行;
第三点、接口定义方法,不能实现,而抽象类可以实现部分方法;
第四点、接口中基本数据类型为final static(默认),而抽类象不是的。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的
所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。)
补充:
含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然在
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
下面接着再说说两者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码,伪代码如下:
public abstract class BaseServlet extends HttpServlet { public final void service(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException { //记录访问日志 //进行权限判断 if(具有权限){ try{ doService(request,response); } catch(Excetpion e){ //记录异常信息 } } } protected abstract void doService(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException; //注意访问权限定义成protected,显得既专业,又严谨,因为它是专门给子类用的 } public class MyServlet1 extends BaseServlet { protected void doService(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException { //本Servlet只处理的具体业务逻辑代码 } }
父类方法中间的某段代码不确定,留给子类干,就用模板方法设计模式。
备注:这道题的思路是先从总体解释抽象类和接口的基本概念,然后再比较两者的语法细节,最后再说两者的应用区别。比较两者语法细节区别的条理是:先从一个类中的构造方法、普通成员变量和方法(包括抽象方法),静态变量和方法,继承性等6个方面逐一去比较回答,接着从第三者继承的角度的回答,特别是最后用了一个典型的例子来展现自己深厚的技术功底。
相关推荐
java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...
Java抽象类与接口实验报告
### Java抽象类与接口的区别 #### 一、引言 在Java编程中,抽象类(Abstract Class)与接口(Interface)都是实现抽象的关键工具。它们各自有着独特的优势和适用场景,掌握这两者的区别有助于开发者更好地设计系统...
Java 抽象类与接口实验报告 一、实验目的及要求 本实验的目的是掌握 Java 中的抽象类和接口的概念及其应用。通过本实验,学生将了解抽象类和接口的定义、特点及使用场景,并掌握如何使用抽象类和接口来描述不同的...
接口与抽象类的选择取决于具体的设计需求。如果关注的是行为的规范,且可能有多个实现者,那么接口是更好的选择。如果需要共享实现细节或者提供默认行为,抽象类则更为合适。 在压缩包中的"抽象类与接口"文件中,你...
Java抽象类与接口是编程语言Java中的核心概念,它们在软件设计中扮演着至关重要的角色。在Java课程中,理解并掌握抽象类和接口对于学习者来说至关重要,因为这两个概念帮助程序员实现代码的复用、模块化和扩展性。 ...
浅析高职教学之Java抽象类与接口 本文对Java抽象类和接口的区别与联系进行了详细的分析,并着重讨论了如何在高职教学中讲授这些内容。文章首先介绍了Java抽象类和接口的概念,然后对它们之间的区别和联系进行了剖析...
本文通过战略角度对Java抽象类与接口进行深入剖析,力图揭示其在软件设计中的核心作用以及如何应用它们来解决实际问题。 首先,让我们从战略角度来理解Java中的抽象类与接口。抽象类与接口的引入,并非仅仅是为了...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们都用于实现多态性,但各自具有不同的特点和应用场景。了解并熟练掌握它们的区别对于编写高质量的Java代码至关重要。 首先,抽象类是一种不能被...
### Java抽象类与接口的深入思考 在Java编程语言中,抽象类(abstract class)与接口(interface)是实现多态性以及代码复用的重要工具。本文将通过具体实例来探讨这两种概念的区别及其应用场景,帮助读者更好地...
在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...
### 深入剖析Java抽象类与接口的神秘力量 - 探索编程世界的双极法则 #### 第一章:抽象类的创世神话 —— 基础与实战 ##### 概念解析: 抽象类在Java编程语言中扮演着极其重要的角色。它可以被视为一种特殊类型的...
在Java编程中,抽象类和接口是两种不同的机制,用于实现代码的多态性和抽象性。它们在设计和实现上有着明显的区别。 1.1 语法层面的区别 抽象类(Abstract Class)是一个不能被实例化的类,它通常包含抽象方法...
学生通过对该项目整体框架的搭建和对动物城信息管理等模块的设计与功能实现,训练了学生对项目框架的搭建、类的封装、抽象类定义与继承、接口的定义与接口的实现等Java OOP面向对象知识点的掌握。 本项目主要包括...
此书对于你学习Java抽象类和接口有非常大的帮助
在Java编程语言中,抽象类和接口是两种重要的机制,用于实现多态性和代码的抽象。它们在软件设计中起到关键作用,帮助我们构建可扩展和灵活的系统。 首先,让我们了解一下抽象类。抽象类是一种不完整的类,它可能...
在Java编程语言中,抽象类和接口是两种面向对象编程(OOP)机制,用以实现抽象概念的不同方式。理解这两者之间的区别对于掌握Java的面向对象特性至关重要,尤其在设计软件架构时。以下将详细分析Java中抽象类和接口...
Java中的抽象类与接口是两种不同的机制,它们用于实现多态性和代码重用,但在具体用法和设计原则上有显著的差异。理解这两者的区别对于编写高质量、可维护的Java代码至关重要。 首先,抽象类是一种特殊的类,它可以...
理解并掌握Java中的抽象类与接口的区别,有助于开发者根据需求选择合适的设计模式,优化代码结构,提高代码的可维护性和扩展性。在实际开发中,往往需要结合使用抽象类和接口,以充分利用两者的优势,实现更灵活和...