精华内容
下载资源
问答
  • 接口是对动作的抽象抽象对根源的抽象。当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。第一点.接口可以多继承,抽象类不行第二点.接口中,在jdk1.8之后可以用static和default去...

    接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。

    当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

    第一点. 接口可以多继承,抽象类不行

    第二点. 接口中,在jdk1.8之后可以用static和default去修饰方法并且实现,此时实现接口的子类可以调用default修饰的方法,接口名调用被static修饰的静态方法(default只能用于接口或者switch case上);而抽象类可以实现部分方法。

    第四点. 接口中基本数据类型为static 而抽类象不是的。

    如果A接口和B接口中有参数相同,方法名相同eat的抽象方法,C类去实现这两个接口,重写任意一个就行;

    但如果A接口和B接口中有参数相同,方法名相同,方法体不同的被default修饰的方法,C类直接实现需要重写该方法,方法体里面

    默认写法为:A.super.eat();调用其中任意一个接口中的方法,也可以改成B.super.eat();该写法只能是:C类实现的含有defaut修饰的方法的接口名.super.被default修饰的方法名();C类没有实现D接口,即使D接口中有defaut修饰的eat方法,也无法D.super.eat();

    展开全文
  • //如果抽象类的类体的方法全部都是抽象方法,可以把把这个类定义为接口//换言之,类体全部都是抽象方法,可以把这个类定义为接口.interface Runer//接口的定义,接口里只包含常量和抽象方法.{String texing="动时要...

    //如果抽象类的类体里的方法全部都是抽象方法,可以把把这个类定义为接口

    //换言之,类体里全部都是抽象方法,可以把这个类定义为接口.

    interface Runer//接口的定义,接口里只包含常量和抽象方法.

    {

    String texing="动时要振动";//接口里的常量默认是用public static final标志的

    void run();//默认的访问权限是public.

    String jump();

    }

    interface Animals extends Runer//一个新的接口可以继承另一个接口

    {

    void breathe();//在继承的基础上,有新的矿展.动物不仅能动,还能呼吸.

    }

    //实现接口抽象方法的方式 注意联想实现抽象类里的抽象方法的方式.

    abstract class Fish implements Animals//实现接口抽象方法的定义

    {//如果省掉abstract, Fish类类体必须覆盖Animals里的所有抽象方法,否则报错.

    public void run()//public不能省,因为上面都是public型,子类访问父类,访问权限不能比父类低

    {

    System.out.println("Fish is swiming");

    }

    public String jump()

    {

    System.out.println("Fish靠尾巴跳动");

    return "wooo";

    }

    public void breathe()

    {

    System.out.println("Fish呼出的是汽泡");

    }

    }

    //比较:实现抽象类的抽象方法与实现接口的抽象方法所采取的方式.

    //实现抽象类的抽象方法,是通过abstract class 子类名 extends 父类名 -----格式

    //实现接口的抽象方法,是通过abstract class 类名a implements 类名b ------格式

    //两者相同点:都要声明抽象类abstract class 类名,不同点,前者用关键字extends

    //后者用implements

    简洁代码:

    interface Runer

    {

    String texing="动时要振动";

    void run();

    String jump();

    }

    interface Flyer

    {

    int ID=20;

    void fly();

    }

    interface Animals extends Runer

    {

    void breathe();

    }

    abstract class Bird implements Runer,Flyer//实现多个接口

    {

    public void run() {}

    }

    abstract class Fish implements Animals//实现接口

    {

    public void run()

    {

    System.out.println("Fish is swiming");

    }

    public String jump()

    {

    System.out.println("Fish靠尾巴跳动");

    return "wooo";

    }

    public void breathe()

    {

    System.out.println("Fish呼出的是汽泡");

    }

    }

    //class person {}

    abstract class student extends person implements Runer,Flyer//继承一个类的同时,实现多个接口.

    {

    public void run() {}

    public String jump(){return "ee";}

    }

    展开全文
  • java中HttpServletRespone接口中的方法为什么能直接用,接口里方法都是抽象的吗?
  • 在最新版本Java1.8中的变化, Stephen Colebourne 告诉Hartmut Schlosser,“我认为最重要的语言上的改变不是Lambdas表达式,而是在接口上的静态和默认方法”。ColeBoune补充道,“默认方法功能的增加减少了许多...

    在最新版本Java1.8中的变化里, Stephen Colebourne 告诉Hartmut Schlosser,“我认为最重要的语言上的改变不是Lambdas表达式,而是在接口上的静态和默认方法”。ColeBoune补充道,“默认方法功能的增加减少了许多使用抽象类的原因”。当我读到这里时,我意识到Colebourne是正确的,而且我通常用抽象类的许多场景可以通过JDK1.8的默认方法(default method)替换为JDK1.8接口。

    在我思考Java1.8中接口和抽象类尚存在的不同,我决定去看看Java Tutorial关于这部分说过的信息。这个引导(Tutorial)已经更新到JDK 8 而且关于抽象方法和类的讨论有一个章节,称作 抽象类 vs 接口。这个章节指出在JDK 8 中接口和抽象类的异同点。着重强调的不同点是数据成员和方法的作用域(访问权限):

    抽象类允许非静态和非final的域,允许方法成为public,static和final

    所有的接口方法本质为public的。

    在Java Tutorial接着列出了许多应该考虑抽象类的场景,和许多应该考虑接口的场景。不出意料,这些源于前面提到的不同、分歧,主要处理你是否需要域和方法成为private,protected,non-static,或者 not-final(偏向抽象类),或者你需要把重点放在类型而不是考虑实现的能力(偏向接口)。

    因为Java语序一个类实现多个接口但只能继承一个类,接口可能被视为有利于多继承的实现。多亏JDK 8 的默认方法,这些接口甚至能提供默认的实现。

    那么,一个很自然的问题是:当一个类实现了两个接口,而这两个接口描述了一个具有相同特点的默认方法,Java怎么处理。答案是,这会报一个编译错误。这是一个屏幕截图,NetBeans8上运行报的这个错误。

    netBeans8CompilerErrorMultipleInterfacesSameDefaultMethodSignatures.png

    编译报错

    结论

    JDK 8 争议性的把抽象类的优点带给接口。造成的影响是今天有大量的抽象类通过默认方法可能被替换为接口。

    展开全文
  • 接口 1.不允许多重继承类,可以多重继承接口,...3.实现接口方法必须实现这个接口里的所有方法。 二 理解抽象类  abstract class和interface在Java语言中都用来进行抽象类(本文中的抽象类并非从abs

    一 接口

    1.不允许多重继承类,可以多重继承接口,继承的多个接口之间用逗号分开。

    2.接口中定义的常量默认为public, static,and final 。定义的方法都默认是public的

    3.实现接口的方法必须实现这个接口里的所有方法。


    二 理解抽象类

        abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法, 请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?

      在 面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、 三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念 在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

      在面向对象领域,抽象类主要用来进行类型隐藏。 我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知 道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。


    三 从语法定义层面看abstract class 和 interface

      在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。
      使用abstract class的方式定义Demo抽象类的方式如下:

    abstract class Demo{
      abstract void method1();
      abstract void method2();

      使用interface的方式定义Demo抽象类的方式如下:

    interface Demo{
      void method1();
      void method2();

    }

      在abstract class方式中,Demo可以有自己的数据成员,也可以有非 abstract的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final 的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的 abstract class。
      从编程的角度来看,abstract class和interface都可以用来实现 "design by contract" 的思想。但是在具体的使用上面还是有一些区别的。
      首先,abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系(因为Java不支持多继承)。但是,一个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。
      其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会增加一些复杂性,有时会造成很大的麻烦。

    在抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的麻烦。因 为如果后来想修改类的界面(一般通过 abstract class 或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添 加新的参数时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。但是如果界面是通过abstract class来实现的,那 么可能就只需要修改定义在abstract class中的默认行为就可以了。
      同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了 "one rule,one place" 原则,造成代码重复,同样不利于以后的维护。因此,在abstract class和interface间进行选择时要非常的小心。

    四。从设计理念层面看 abstract class 和 interface

      上面主要从语法定义和编程的角度论述了abstract class和interface的区 别,这些层面的区别是比较低层次的、非本质的。本小节将从另一个层面:abstract class和interface所反映出的设计理念,来分析一下二者的区别。作者认为,从这个层面进行分析才能理解二者概念的本质所在。
      前面已经提到过,abstract class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a"关系,即父类和派生类在概念本质上应该是相同的。对于interface来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的, 仅仅是实现了interface定义的契约而已。为了使论述便于理解,下面将通过一个简单的实例进行说明。

    考虑这样一个例子,假设在我们的问题领域中有一个关于Door的抽象概念,该Door具有执行两个动作open和close,如果现在要求Door还要具有报警的功能。我们该如何设计针对该例子的类结构呢

     既然open、close和alarm属于两个不同的概念,根据ISP原则应该把它们分别定 义在代表这两个概念的抽象类中。定义方式有:这两个概念都使用 abstract class 方式定义;两个概念都使用interface方式定义;一个概念 使用 abstract class 方式定义,另一个概念使用interface方式定义。
      显然,由于Java语言不支持多重继承,所以两个概念都使用abstract class方式定义是不可行的。后面两种方式都是可行的,但是对于它们的选择却反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理。我们一一来分析、说明。
      如果两个概念都使用interface方式来定义,那么就反映出两个问题:1、我们可能没有 理解清楚问题领域,AlarmDoor在概念本质上到底是Door还是报警器?2、如果我们对于问题领域的理解没有问题,比如:我们通过对于问题领域的分 析发现AlarmDoor在概念本质上和Door是一致的,那么我们在实现时就没有能够正确的揭示我们的设计意图,因为在这两个概念的定义上(均使用 interface方式定义)反映不出上述含义。
      如果我们对于问题领域的理解是:AlarmDoor在概念本质上是Door,同时它有具有报 警的功能。我们该如何来设计、实现来明确的反映出我们的意思呢?前面已经说过,abstract class在Java语言中表示一种继承关系,而继承关系 在本质上是"is-a"关系。所以对于Door这个概念,我们应该使用abstarct class方式来定义。另外,AlarmDoor又具有报警功能,说 明它又能够完成报警概念中定义的行为,所以报警概念可以通过interface方式定义。


    五 抽象方法

    抽象方法 就 是以abstract修饰的方法,这种方法是不完整的;仅有声明而没有方法体。如:

    abstract void f();

    这种方法只声明返回的数据类型、方法名称和所需的参数,没 有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是 abstract的,而这个子类也必须是抽象的,即声明为abstract。

    抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法, 但是构造方法不能被声明为抽象。
        抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。
        abstract不能与private、static、final、native并列修饰同一个方法。



    六 小结
      1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
      2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
      3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。 
      4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
      5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。 
      7.接口中的方法默认都是 public,abstract类型的。


    展开全文
  • //如果抽象类的类体的方法全部都是抽象方法,可以把这个类定义为接口 //换言之,类体全部都是抽象方法,可以把这个类定义为接口. interface Runer//接口的定义,接口里只包含常量和抽象方法. { String texing="动时...
  • 这个面试题中经常遇见的(和java是否支持多继承一起问),其实接口抽象俩种形式来体现java的OPP思想,但这俩者有很多不同的地方。抽象类定义了需要子类去继承它,如果你定义了一个抽象类而不去继承它,那么...
  • 一,简单总结1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。2、抽象类要被子类继承,接口要被类实现。3、接口只能做...
  • Java抽象类和接口中有构造方法吗?①在接口中 不可以有构造方法接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。A. 构造方法用于初始化成员变量,但是接口没有成员变量。接口是一种规范...
  • Java接口Java抽象

    2013-04-23 08:36:36
    Java接口Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才它们的最佳位置呢?把它们比较一下,你就可以发现...如果向一个抽象加入一个新的具体方法时,那么它所有的子类一下子得到了这
  • 如果向一个抽象加入一个新的具体方法,那么他所有的子类一下子得到了这个新方法,而java接口做不到这一点。如果向一个java接口里面加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为必须让那个...
  • Java接口Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才它们的最佳位置呢?把它们比较一下,你就可以发现...如果向一个抽象加入一个新的具体方法时,那么它所有的子类一下子得到了这
  • 接口1 因为java不支持多重继承,所以有了...3 接口里面的方法默认都是public abstract类型的。隐式声明。4 接口没有构造方法,不能被实例化。5 接口不能实现另一个接口,但可以继承多个接口。6 类如果实现了一个接口...
  • PAGE / NUMPAGES 从面向对象设计的角度来说抽象类与抽象方法接口都是必不可少的内容正是这些概念以及实际运用够成了java面向对象的核心与强大抽象类方法是和多态密不可分的设计范式 何为多态简单的说就是一类事物的...
  • 1、抽象类:如果这个类里面的方法有一个是抽象的,那么这个类必须是抽象的。...如果一个类实现了此接口,必须覆盖接口中的所有抽象方法。一、 抽象类1、抽象类包含一个抽象方法的类就是抽象类2、抽象方法...
  • java中的接口是一种特殊的抽象类,接口里面的所有方法都是抽象方法接口里面的所有属性都是常量;也就是说,接口里面只有方法定义而没有任何方法实现。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更...
  • java 接口抽象

    2018-03-28 12:45:21
    1.java接口的概念在java接口是一种特殊的抽象类,跟一般的抽象类相比,接口里面 的所有方法都是抽象方法接口里面的所有属性都是常量。也就是说,接口里面只有方法定义而没有任何方法实现。2.接口用来干什么...
  • 接口1 因为java不支持多重继承,所以有了...3 接口里面的方法默认都是public abstract类型的。隐式声明。4 接口没有构造方法,不能被实例化。5 接口不能实现另一个接口,但可以继承多个接口。6 类如果实现了一个接口...
  • 接口和抽象类区别 a.抽象类可以有非抽象方法 接口里只能有抽象方法 b.接口是抽象类的变体,再接口中所有方法都是抽象的 转载于:https://www.cnblogs.com/zhaozhaozhang/p/5759714.html...
  • Java接口抽象

    2019-01-10 15:46:47
    到目前为止,看起来接口与抽象类很像,他们里面都有抽象方法,都不能实例化。但其实他们的含义及其想解决的问题都是截然不同的,本文将从两个方面介绍他们之间的区别。 一、语法上的不同 接口与抽象类语法上有很大...
  • 1、接口中不能有普通方法,必须都是抽象方法,可以省略掉abstract关键字 抽象类里面可以没有抽象方法,可以全是普通方法,但不可以省略掉abstract关键字 2、接口可以有多个父接口 抽象类只能有一个父类 3、接口可以...
  • java 接口类和抽象类的区别

    千次阅读 2018-07-25 09:07:28
    接口与类的区别和联系: ...也就说抽象类既可以有抽象方法,也可以没有,但是接口里的方法必须全部是抽象方法接口里只能定义静态常量,不能定义普通成员变量,抽象类则既可以定义普通成员变量,也可...
  • 1.抽象类要被子类继承,接口要被类实现。...5.抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。 6.抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。 7.抽象类主要用来抽象...
  • 抽象类:1.用abstract表示2.里面有一个或多个抽象...接口是极度抽象的类,所有方法都是抽象的,都需要进行重写接口的作用:解决java中的单继承问题,一个类可以实现多个接口,但只能有一个父类共同点:都不能被实例化
  • Java接口抽象

    2016-08-10 21:38:23
     1、Java接口Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯 一的优点吧,但这个优点非常有用。如果向一个抽象加入一个新的具体方时,...
  • Java接口Java抽象类代表的是抽象类型,是... 如果向一个抽象类加入一个新的具体方法时,那么它所有的子类一下子得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这
  • 由于接口定义是一种规范,因此接口里不能包含构造器和初始化快定义,接口里只能包含静态常量,方法只能是抽象方法,类方法,默认方法。因此如果不是定义默认方法,系统自动为其定义为abstract方法, 接口和抽象类...
  • 定义抽象类:声明方法的存在而不去实现它的类叫做抽象类(abstract class),里面可以有抽象方法和非抽象方法,另外,抽象类是不能被实例化的...接口接口里面的方法全部都是抽象方法,它是抽象类的变体;由于接

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 996
精华内容 398
关键字:

java里接口都是抽象方法

java 订阅