`

抽象类,接口,以及两者的区别

阅读更多

1抽象类

含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract classabstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。

2接口

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final

3两者的区别

下面比较一下两者的语法区别:

1.抽象类可以有构造方法,接口中不能有构造方法。

2.抽象类中可以有普通成员变量,接口中没有普通成员变量

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

4. 抽象类中的抽象方法的访问类型可以是publicprotected和(默认类型,虽然

eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

5. 抽象类中可以包含静态方法,接口中不能包含静态方法

6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

7. 一个类可以实现多个接口,但只能继承一个抽象类。

       4两者在应用上的区别:

接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有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只处理的具体业务逻辑代码

           }

 

}

父类方法中间的某段代码不确定,留给子类干,就用模板方法设计模式。

5回答思路

备注:这道题的思路是先从总体解释抽象类和接口的基本概念,然后再比较两者的语法细节,最后再说两者的应用区别。比较两者语法细节区别的条理是:先从一个类中的构造方法、普通成员变量和方法(包括抽象方法),静态变量和方法,继承性等6个方面逐一去比较回答,接着从第三者继承的角度的回答,特别是最后用了一个典型的例子来展现自己深厚的技术功底。

分享到:
评论

相关推荐

    Java中抽象类和接口的区别

    在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...

    详细解析Java中抽象类和接口的区别

    ### 详细解析Java中抽象类和接口的区别 #### 引言 在面向对象编程中,Java作为一种广泛应用的编程语言,提供了多种方式来实现抽象的概念。其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这...

    java抽象类与接口区别

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

    抽象类和接口 区别分析

    ### 抽象类和接口的区别分析 在面向对象编程中,抽象类与接口都是实现代码复用和提高软件模块化的重要工具。它们各自拥有独特的特性和应用场景,掌握这些概念对于编写高质量、可维护性强的代码至关重要。下面我们将...

    抽象类和接口的区别

    抽象类和接口的区别 【概述】 一个软件设计的好坏,我想很大程度上取决于它的整体架构, 而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时, 你底层的具体实现...

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

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

    教学视频-抽象类&接口

    5. **接口与抽象类的区别**:对比两者在使用上的差异,包括继承的数量限制(一个类只能继承一个抽象类,但可以实现多个接口)和成员类型(抽象类可有实例变量,接口则没有)。 6. **适配器模式**:可能会介绍如何...

    C#抽象类与接口方法

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

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

    在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性的关键概念,它们各自有特定的用途和优缺点。本文将深入探讨这两种概念,帮助你理解它们之间的区别以及如何在实际开发中选择使用...

    抽象类和接口

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

    抽象类接口和包

    在本实验中,我们将探讨这两者以及如何使用包来组织类和接口。 首先,抽象类是一种不能被实例化的类,它通常包含抽象方法,即没有具体实现的方法。抽象类的主要目的是为了提供一种模板,让其他类可以继承并提供具体...

    抽象类与接口的区别

    ### 抽象类与接口的区别 在Java编程中,抽象类和接口是实现抽象和多态性的关键概念,它们在程序设计中扮演着至关重要的角色。然而,尽管它们都能用于定义一组方法签名而不提供实现,但它们之间存在显著的差异,这些...

    抽象类和接口 测试结果

    在编程世界中,抽象类和接口是面向对象设计的重要概念,它们都用于实现代码的抽象和多态性,但有着不同的使用场景和规则。这里我们将深入探讨这两种机制,并结合给出的"codePiece"代码片段来分析它们在实际应用中的...

    class.forname的作用 详细解析抽象类和接口的区别

    "详细解析 Java 中抽象类和接口的区别" 从面向对象的角度来看,抽象类和接口是 Java 语言中支持抽象类定义的两种机制。它们之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换。然而,两者之间还是...

    接口和抽象类的区别(面向对象)

    接口与抽象类的区别 抽象方法是必须实现的方法。就象动物都要呼吸。但是鱼用鳃呼吸,猪用肺呼吸。 动物类要有呼吸方法。怎么呼吸就是子类的事了。 现在有很多讨论和建议提倡用interface代替abstract类,两者从...

    接口和抽象类使用详细实例源代码

    在编程世界中,接口(Interface)和抽象类(Abstract Class)是面向对象设计的重要概念,它们都是用于定义规范和提供多态性的方式。本实例源代码深入探讨了这两种概念及其在实际开发中的应用。 首先,我们需要理解...

    JAVA中抽象类与接口的区别

    总之,理解和掌握抽象类与接口的区别对于Java开发者来说至关重要,因为它们是构建可扩展和可维护的面向对象代码的基础。正确选择抽象类或接口有助于遵循开闭原则(OCP),使代码易于扩展且不易修改,提高软件的灵活...

    浅析Java抽象类与接口的区别.pdf

    这导致了两者的另一个重要区别:抽象类可以提供方法的部分实现,而接口则仅提供方法的声明。 总结来说,抽象类和接口在Java中都是实现抽象的机制,但它们的使用场景和限制各有不同。抽象类提供了一种继承机制,用于...

Global site tag (gtag.js) - Google Analytics