精华内容
下载资源
问答
  • 抽象类和接口之间的区别是热门的Java面试题。抽象类和接口是Java编程语言的核心部分,如何选择接口或抽象类是每个架构师面临的设计决策。在前面的文章中,学习了有关java接口和抽象类。在这篇文章中,我们将了解抽象...

    抽象类和接口之间的区别是热门的Java面试题。抽象类和接口是Java编程语言的核心部分,如何选择接口或抽象类是每个架构师面临的设计决策。

    在前面的文章中,学习了有关java接口和抽象类。

    在这篇文章中,我们将了解抽象类和接口之间的区别,以及何时应该在抽象类上使用接口,反之亦然。

    抽象类和接口之间的区别主要体现在以下几个方面abstract关键字用于创建抽象类,它也可以与方法一起使用,而interface关键字用于创建接口,不能与方法一起使用。

    子类使用extends关键字来扩展抽象类,它们需要提供抽象类中所有声明的方法的实现,除非子类也是一个抽象类而不需要实现。而子类使用implements关键字来实现接口,并且应该为所有声明的方法提供实现。

    抽象类可以具有实现的方法,而接口提供绝对抽象,并且不能具有任何方法实现。请注意,从Java 8开始,可以在包含方法实现的接口中创建默认和静态方法。

    抽象类可以有构造函数,但接口不能有构造函数。

    抽象类具有普通java类的所有功能,除了无法实例化它。可以使用abstract关键字来创建类抽象,但接口是完全不同的类型,并且只能有公共静态最终常量和方法声明。

    抽象类方法可以具有访问修饰符作为:public,private,protected,static但是接口方法是隐式公共和抽象的,我们不能使用任何其他访问修饰符和接口方法。

    子类只能扩展一个抽象类,但可以实现多个接口。

    抽象类可以扩展其他类并实现接口,但接口只能扩展其他接口。

    如果它有main()方法,可以运行一个抽象类。但是不能运行接口,因为接口不能有main方法实现。

    接口用于定义子类的契约,而抽象类也定义契约,但它可以为子类提供其他方法实现。

    上面就是接口和抽象类之间的区别。

    使用接口还是抽象类?

    如何在接口或抽象类之间进行选择以提供子类的契约是一个设计决策,取决于许多因素。让我们看看何时使用接口,何时使用抽象类。

    Java不支持多类级别继承,因此每个类只能扩展一个超类。但是一个类可以实现多个接口。因此,大多数时候,接口是为类层次结构和契约提供基础的不错选择。在接口方面编码也是在java中编码的最佳实践之一。

    如果契约中有很多方法,那么抽象类更有用,因为可以为所有子类共有的一些方法提供默认实现。此外,如果子类不需要实现特定的方法,它们可以避免提供实现,但是在接口的情况下,子类必须为所有方法提供实现,即使它没有用,并且实现只是空块。

    如果基本契约不断变化,那么接口可能会导致问题,因为我们无法在不更改所有实现类的情况下向接口声明其他方法,使用抽象类可以提供默认实现,并且只更改实际执行的实现类使用新方法。

    使用抽象类和接口

    大多数时候,使用接口和抽象类是设计系统的最佳方法,例如在JDK中java.util.List是一个包含很多方法的接口,所以有一个抽象类java.util.AbstractList,它为List接口的所有方法提供骨架实现,以便任何子类都可以扩展此类并仅实现所需的方法。

    我们应该始终以接口作为基础并定义每个子类应该实现的方法,然后如果有一些方法只应该实现某些子类,可以扩展基接口并使用这些方法创建一个新接口。子类可以选择在基本接口或子接口之间进行选择,以根据其要求实现。如果方法的数量增长很多,那么提供一个实现子接口的骨架抽象类并为子类提供在接口和抽象类之间进行选择的灵活性并不是一个坏主意。

    Java 8的接口变化

    从Java 8开始,可以在接口中提供方法的实现。可以在接口中创建默认方法和静态方法,并为它们提供实现。这弥补了抽象类和接口之间的差距,现在接口是要走的路,因为可以通过为新方法提供默认实现来进一步扩展它。

    ¥ 我要打赏

    纠错/补充

    收藏

    加QQ群啦,易百教程官方技术学习群

    注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

    展开全文
  • 接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制。接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现。接口(英文:Interface),在JAVA编程语言中...

    接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制。

    接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现。

    接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

    接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

    除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

    接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

    抽象类是可以有私有方法或私有变量的,通过把类或者类中的方法声明为abstract来表示一个类是抽象类,被声明为抽象的方法不能包含方法体。子类实现方法必须含有相同的或者更低的访问级别(public->protected->private)。抽象类的子类为父类中所有抽象方法的具体实现,否则也是抽象类。

    接口可以被看作是抽象类的变体,接口中所有的方法都是抽象的,可以通过接口来间接的实现多重继承。接口中的成员变量都是static final类型,由于抽象类可以包含部分方法的实现,所以,在一些场合下抽象类比接口更有优势。

    相同点:

    (1)都不能被实例化

    (2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。

    不同点:

    (1)接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。

    (2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。

    (3)接口强调特定功能的实现,而抽象类强调所属关系。

    (4)接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。

    (5)接口被用于常用的功能,便于日后维护和添加删除,而抽象类更倾向于充当公共类的角色,不适用于日后重新对立面的代码修改。功能需要累积时用抽象类,不需要累积时用接口。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • java接口和抽象类详解

    2021-03-07 10:48:46
    一、抽象类: (关键字abstract)java抽象类定义 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类...
    一、抽象类: (关键字abstract)


    java抽象类定义


      在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。


      抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。


      由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。


      父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。


      在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。



      为什么会出现抽象类?


        在不断抽取过程中,将共性内容中的方法声明抽取,但是方法内容不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abstract所标示,声明为抽象方法。


        抽象方法所在类一定要标示为抽象类,也就是说该类需要被abstract关键字所修饰。



      抽象类的特点:


      1:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰(可以描述类和方法,不可以描述变量) 。


      2:抽象方法只定义方法声明,并不定义方法实现。


      3:抽象类不可以被创建对象 ( 实例化 ) 。


      4:抽象类必须由其子类覆盖了所有的抽象方法后,该子类才可以实例化。否则,该子类还是抽象类。



      抽象类的细节:


      1、抽象类中是否有构造函数?


        有,用于给子类对象进行初始化。


      2、抽象类中是否可以定义非抽象方法?


      可以。其实,抽象类和一般类没有太大的区别,都是在描述事物,只不过抽象类在描述事物时,有些功能不具体。所以抽象类和一般类在定义上,都是需要定义属性和行为的。只不过,比一般类多了一个抽象函数。而且比一般类少了一个创建对象的部分。


      3、抽象关键字 abstract 和哪些关键字不可以共存?


        private 。抽象方法需要被子类方法覆盖才可以使用,private修饰的方法不可以被子类继承。


        static 。static和abstract同时修饰一个方法时,被static修饰的方法,可以直接被类名调用,此方法没有内容,调用此方法没有意义。


        final 。当final和abstract同时修饰一个方法时,abstract修饰的方法必须被子类覆盖才能使用,而被final修饰的方法不能被覆盖。


      4、抽象类中可不可以不定义抽象方法?


        可以。不定义抽象方法目的是不让抽象类创建对象。


      5、抽象类一定是父类吗?


        是的,因为需要被其子类覆盖其所有的抽象方法才能使用。



      二、接口:(关键字interface).


      为什么会出现接口?


        当一个抽象类中,所有的方法都是抽象方法时,这时可以将该抽象类用另一种形式定义和表示,就引入了接口的概念。


      1、是用关键字 interface 定义的。


      2、接口中包含的成员,最常见的有全局常量、抽象方法。


      注意:接口中的成员都有固定的修饰符。


      成员变量: public static final 。


      成员方法: public abstract 。


      接口的表现形式:


      interface Inter


      {


      public static final int x = 3;


      public abstract void show();


      }


      3、接口中有抽象方法,说明接口不可以实例化 。接口的子类必须实现了接口中所有的抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。


      4、类与类之间存在着继承关系,类与接口之间存在的是实现关系。继承用 extends ;实现用 implements ;


      5、接口和类不一样的地方,就是,接口可以被多实现 ,这就是多继承改良后的结果。java 将多继承机制通过多实现来体现。


      6、一个类在继承另一个类的同时,还可以实现多个接口。所以接口的出现避免了单继承的局限性。还可以将类进行功能的扩展。


      7、其实 java 中是有多继承的。接口与接口之间存在着继承关系,接口可以多继承接口。



      接口都用于设计上,设计上的特点:


      1、接口是对外提供暴露的规则。


      2、接口是功能的扩展。


      3、接口的出现降低了耦合性。



      抽象类与接口异同点:


      抽象类:一般用于描述一个体系单元,将一组共性内容进行抽取。特点:可以在类中定义抽象内容让子类实现,可以定义非抽象内容让子类直接使用。它里面定义的都是一些体系中的基本内容。


     接口: 一般用于定义对象的扩展功能,是在继承之外还需这个对象具备的一些功能。



      抽象类和接口的共性:都是不断向上抽取的结果。


      抽象类和接口的区别:


      1、抽象类只能被继承,而且只能单继承。


      接口需要被实现,而且可以多实现。


      2、抽象类中可以定义非抽象方法,子类可以直接继承使用。


      接口中都有抽象方法,需要子类去实现。


      3、抽象类使用的是 is a 关系。


      接口使用的 like a 关系。


      4、抽象类的成员修饰符可以自定义。


      接口中的成员修饰符是固定的。全都是public的。


    展开全文
  • 接口和抽象类提供了一种将接口与实现分离的更加结构化的方法。

    Java初窥门径

    1. Java万物皆对象,带你进入编程之旅!
    2. Java运算符,操纵数据全靠它!
    3. Java控制流程,保持身材尤为重要!
    4. Java初始化和清理,控制安全是首要!
    5. Java封装是为了更好的重构!
    6. JavaOOP优雅总是会有回报!
    7. Java接口和抽象类如何选择!
    8. Java集合,日常开发掌握这些就够了
    9. Java不要再问String为什么是不可变的!


    前言

    接口和抽象类提供了一种将接口与实现分离的更加结构化的方法。


    抽象类

    Java 提供了一个叫做抽象方法的机制,这个方法是不完整的:它只有声明没有方法体。下面是抽象方法的声明语法:

    abstract String name();
    

    包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,那么类本身也必须限定为抽象的,否则,编译器会报错。

    abstract class User {
        abstract String name();
    }
    

    接口

    使用 interface 关键字创建接口,interface 和 class 一样随处常见。像下面这样:

    public interface User {
        int age(); 
    }
    

    多继承

    Java只能继承自一个类(或抽象类),但可以实现任意多个接口。因为接口中不允许存在属性(只有静态属性,不适用),所以属性只会来自单个基类或抽象类,也就是说,不会存在状态的多继承。正如下面这样:

    interface One {
        default void first() {
            System.out.println("first");
        }
    }
    
    interface Two {
        default void second() {
            System.out.println("second");
        }
    }
    
    interface Three {
        default void third() {
            System.out.println("third");
        }
    }
    
    class MI implements One, Two, Three {}
    

    抽象类和接口

    在实际开发过程中,选择用抽象类还是用接口有时候是一件令人困惑的选择。有一条实际经验:尽可能地抽象。因此,更倾向使用接口而不是抽象类。只有当必要时才使用抽象类。抽象类仍然是一个类,在创建新类时只能继承它一个。而创建类的过程中可以实现多个接口。下表做了明确的区分:

    特性接口抽象类
    组合新类可以组合多个接口只能继承单一抽象类
    状态不能包含属性(除了静态属性,不支持对象状态)可以包含属性,非抽象方法可能引用这些属性
    默认方法 和 抽象方法不需要在子类中实现默认方法。默认方法可以引用其他接口的方法必须在子类中实现抽象方法
    构造器没有构造器可以有构造器
    可见性隐式 publicprotected

    总结

    认为接口是好的选择,从而使用接口不用具体类,这具有诱惑性。几乎任何时候,创建类都可以替代为创建一个接口。恰当的原则是优先使用类而不是接口。从类开始,如果使用接口的必要性变得很明确,那么就重构。接口是一个伟大的工具,但它们容易被滥用。

    最后的最后

    为初学者提供学习指南,为从业者提供参考价值。我坚信码农也具有产生洞见的能力。扫描下图二维码关注,学习和交流!
    在这里插入图片描述

    展开全文
  • Java接口和抽象类

    2021-03-22 12:20:48
    一、抽象类publicclassPeople{publicvoidsayHi(){System.out.println("人会说Hi");}publicstaticvoidmain(String[]args){Peoplepeople=newPeople();people.sayHi();}}分析:人是一个抽象的全局对象,实例化之后没有...
  • 一、接口和抽象类类,即一个对象。先抽象类,就是抽象出类的基础部分,即抽象基类(抽象类)。官方定义让人费解,但是记忆方法是也不错的 —包含抽象方法的类叫做抽象类接口就是把抽象的深度更深,它就像用简短的非...
  • Java 接口和抽象类

    2021-03-10 04:33:16
    抽象类:在面向对象领域,抽象类主要用来...不能用于 static 方法或者构造方法中4、在抽象类中必须包含至少一个抽象方法,并且所有抽象方法不能有具体的实现接口:约定规范特点;1、实现接口,要实现所有方法,可...
  • Java接口和抽象类详解

    2021-03-18 11:55:16
    抽象类介乎于普通类和接口之间,提供部分实现方法以及未实现方法,可以看作为一个半成品。抽象类在继承中, 父类是一个通用类,每一个子类都会使类变得越来越明确和具体。如果从子类追溯到父类,类就会变得通用、...
  • 本文实例讲述了Java接口和抽象类。分享给大家供大家参考。具体分析如下:对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又...
  • 这篇文章主要介绍了Java接口和抽象类原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以...
  • 无论是普通类还是抽象类还是接口,只有两种方式,要么public,要么默认(什么都不写,表示包权限) 方法的访问控制修饰符 普通类方法 四个都可以使用 抽象类方法 JDK 1.8以前,抽象类的方法默认访问权限为protected...
  • Java接口和抽象类区别

    2021-03-11 10:24:30
    抽象类Java中能够界说没有方法体的方法,该方法的具体完毕由子类完毕,该方法称为抽象方法,包含抽象方法的类就是抽象类。抽象方法的由来:多个政策都具有相同的功用,可是功用具体内容有所不同,那么在抽取过程中...
  • 问题描述:在java语言中,接口和抽象类都不能被实例化,都位于继承树的顶端,用于被其他类实现继承。接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。在一定程度上,接口...
  • Java中接口和抽象类的异同“抽象方法”属于一种不完整的方法,只含有一个声明,没有方法主体。本文是百分网小编搜索整理的关于Java中接口和抽象类的异同,供参考...Java抽象类和Java接口一样,都用来声明一个新的类...
  • java中,通常初学者搞不懂接口抽象类,这也是面试比较容易问到的一个问题。下面我来谈谈自己的理解。如有不妥之处,还望批评指正,不胜感激。1.抽象类怎么定义继承?我们定义一个抽象类person.class表示类(人)...
  • 接口与抽象类在语义上区别主要在定义和使用格式上,下面分别介绍抽象类和接口的定义与使用:1, 抽象类的定义和使用格式:在java语言中定义抽象类时,要在关键字class前面加上abstract,格式如下:abstract class ...
  • 一、 抽象类和接口的特点包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:1)抽象方法必须为...
  • 接口和抽象类的区别? 接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制。 接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现。 抽象类是可以有私有...
  • 1、Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以(就是interface中只能定义方法,而不能有方法的实现,而在abstract class中则可以既有方法的具体实现,又有...
  • 以下转载自:秋风伊人 https://www.cnblogs.com/3020815dzq/p/8509137.htmlJava接口:总结了4点关于JAVA中接口存在的意义:1、重要性:在Java语言中, abstract class interface 是支持抽象类定义的两种机制。...
  • Java接口:总结了4点关于JAVA中接口存在的意义:1、重要性:在Java语言中, abstract class interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。2、简单、规范性...
  • 抽象类是可以有私有方法或私有变量的,另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现...
  • 1.接口接口是抽象方法的集合,一个接口只有方法的形状而没有方法的具体实现,接口Java面向对象提供的一种机制。Java语言是一种单继承的,在类的继承中通过实现多个...抽象类抽象类是用来捕捉子类的通用特性的 。它...
  • JAVA接口和抽象类

    2021-11-03 18:32:09
    JAVA抽象类和接口的区别

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 552,914
精华内容 221,165
关键字:

java接口和抽象类

java 订阅