精华内容
下载资源
问答
  • java 接口类和抽象类区别

    千次阅读 2018-07-25 09:07:28
     接口里只能包含抽象方法,静态方法默认方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。 也就说抽象类里既可以有抽象方法,也可以没有,但是接口里的方法必须全部是抽象方法。 接口里只能...

    接口与类的区别和联系:

    联系:他们都不能实例化对象,都可以包含抽象方法,而且抽象方法必须被继承的类全部实现。

    区别:1. 接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。

    也就说抽象类里既可以有抽象方法,也可以没有,但是接口里的方法必须全部是抽象方法。

    1. 接口里只能定义静态常量,不能定义普通成员变量,抽象类里则既可以定义普通成员变量,也可以定义静态常量。
    2. 接口不能包含构造器,抽象类可以包含构造器

    4 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

    5接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法; 接口里不能包含初始化块,但抽象类里完全可以包含初始化块。

    6 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

    1. 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
    展开全文
  • Java接口和Java抽象类

    2013-04-23 08:36:36
    1、Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。 如果向一个抽象类里加入一个新的具体方法时,...
    Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了。

    1、Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。
    如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。

    2、一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。
    在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。

    3、从第2点不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。

    4、结合1、2点中抽象类和Java接口的各自优势,具精典的设计模式就出来了:声明类型的工作仍然由Java接口承担,但是同时给出一个Java抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java接口在最上面,然后紧跟着抽象类,哈,这下两个的最大优点都能发挥到极至了。这个模式就是“缺省适配模式”。
    在Java语言API中用了这种模式,而且全都遵循一定的命名规范:Abstract +接口名。

    Java接口和Java抽象类的存在就是为了用于具体类的实现和继承的,如果你准备写一个具体类去继承另一个具体类的话,那你的设计就有很大问题了。Java抽象类就是为了继承而存在的,它的抽象方法就是为了强制子类必须去实现的。

    使用Java接口和抽象Java类进行变量的类型声明、参数是类型声明、方法的返还类型说明,以及数据类型的转换等。而不要用具体Java类进行变量的类型声明、参数是类型声明、方法的返还类型说明,以及数据类型的转换等。

    我想,如果你编的代码里面连一个接口和抽象类都没有的话,也许我可以说你根本没有用到任何设计模式,任何一个设计模式都是和抽象分不开的,而抽象与Java接口和抽象Java类又是分不开的。

    理解抽象,理解Java接口和抽象Java类,我想就应该是真正开始用面向对象的思想去分析问题,解决问题了吧。

    接口和抽象类的不同点有:  

    (1)抽象类可以有实例变量,而接口不能拥有实例变量,接口中的变量都是静态(static)的常量(final)。
      
    (2)抽象类可以有非抽象方法,而接口只能有抽象方法。
      
    java中,类与类之间是不能多继承的。java之所以禁止类与类之间的多继承是因为多继承有很大的缺点。

    多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面:

    (1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量。例如:
      
    类ClassA:
    public class ClassA {
      protected int varSame = 0 ;
      }
    

      类ClassB:
      public class ClassB {
      protected int varSame = 1 ;
      }

      子类ClassC:(假设允许类与类之间多继承) 
     public class ClassC extends ClassA, ClassB {
      public void printOut() {
      System.out.println( super .varSame);
      }
      public static void main(String[] args) {
      ClassC classC = new ClassC();
      classC.printOut();
      }
      }
    

      上面程序的运行结果会是什么呢?输出0还是1?
      
    (2)如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法。例如:
      类ClassA:  
    public class ClassA {
      public void printOut() {
      System.out.println( 0 );
      }
      }
    

      类ClassB:  
    public class ClassB {
      public void printOut() {
      System.out.println( 1 );
      }
      }

      子类ClassC:(假设允许类与类之间多继承)
    public class ClassC extends ClassA, ClassB {
      public static void main(String[] args) {
      ClassA classA = new ClassC();
      classA.printOut(); // ------------------------- A行
      ClassB classB = new ClassC();
      classB.printOut(); // ------------------------- B行
      ClassC classC = new ClassC();
      classC.printOut(); //------------------------- C行
      }
      }

    上面程序的运行结果会是什么呢?A、B、C三行的输出是0还是1?


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

    千次阅读 2019-04-29 19:51:53
    java接口和抽象类区别 ...

        这里说的都是在java8新特性之前的特点。因为在jdk1.7之前,接口是不允许定义方法体的,当然还有一些其他的特性,我这里就不一一列出了。我这篇文章还是说一哈jdk1.7之前的接口和抽象类的区别和联系。

    抽象类

        基本的概念是什么我就不多说了。下面强调的都是我觉得比较重要的特性。
            1.抽象类的的方法必须全部都被子类实现,如果子类没有全部实现,那么子类也是抽象类。

            2.抽象类的方法不一定全部都是抽象的方法,有些方法是可以自己先实现,之后子类直接使用就好。也就是说,其实一个抽象类可以完全就是没有抽象方法,就只有在类名前面加上一个abstract就好。 但是这么做我觉得没有什么实际性的必要。

            3.抽象类不能创建实例对象,但是可以有自己的构造方法。这两者看上去似乎有些矛盾,但是其实也是合理的。因为抽象类是可以有自己的成员变量的,之后子类继承之后,还得调用父类的构造函数。

    接口

        下面讨论的就是接口的特性。注意,这里说的是jdk1.7的特性。
            1.接口里面的方法也得全部被子类实现,如果没有实现的话,那么该类就只能被称作抽象类。

            2.承接第二点,因为如果没有完全实现一个接口的所有的方法,就会导致整个成为一个抽象类。也就是说,接口的实现是强制性的,但是抽象类的实现不是强制性的。就像java源码中也是这个样子在我们使用到监听器的时候,也是为了避免实现一个接口的所有的方法,我们往往会使用一个抽象类去实现这个接口。我记得这个抽象类去实现的时候好像都是空实现。注意,这里所说的空实现也得是函数的前面不能加上一个abstract修饰,不然加上一个空的方法体也是会报错的。然后要你自己的类去继承这个抽象类。那么,你就可以使用你自己想要的方法,而不用去实现你自己不想要的方法。这里也从侧面说明了在jdk1.7的时候,接口中的方法前面的public abstract ,属性前面的public static final都是默认的,你加不加都可以。但是不能改变该函数是一个abstract,所以在接口中方法仅仅只有一个方法体都是会报错的。

            3.其实接口可以间接性的创建对象。使用匿名内部类就是间接性创建了一个对象。

            4.接口里面也是可以有自己的成员变量的,但是默认都是public static final.也就是说,定义的时候就得赋初值。其实我这个理解的也不是特别深入。这里有一篇文章写到不错:http://developer.51cto.com/art/200906/130093.htm
    还有这个文章上面的几句话我觉得说的挺有道理的:

    接口就是提供一种统一的”协议”,而接口中的属性也属于“协议”中的成员。它们是公共的,静态的,最终的常量。相当于全局常量。抽象类是不“完全”的类,相当于是接口和具体类的一个中间层。即满足接口的抽象,也满足具体的实现。

    通俗的讲,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现 implements)开放,接口是对开闭原则的一种体现。

    如果还说服不了自己的话,还有一句话,这个我是在论坛上面看到的:Java本来就是强类型的语言。用sun的话来说就是“你喜欢你就用,不喜欢你就不用。”

    设计接口的目的

        java工程师设计接口的目地是什么捏?我想别人这么设计肯定有他们的目的,好处。而且肯定是有利于项目的合作开发的。但是我也还只是一个学生,还是不太知道项目中接口的优点, 在和别人合作时的优点。但是有一点是可以告诉你的就是:如果Cat,Dog,Snake都继承了Animal,此时我想要在Dog,Snake类中增加一个bitePeople()的方法(因为dog和snake在现实生活中都是会咬人的)。如果你在Animal类中添加这个方法显然是不合适的,因为Cat类中是不需要这个方法的,因为cat是不会咬人的。所以现在怎么做?那么就只能在Dog类和Snake类中都添加这个方法。但是此时就是每一个类中就得都去实现以后就没有多态的效果了,因为Animal中就没有bitePeople()这个方法。 因为没有贴出具体的代码,所以大家不能理解的话,可以去看看下面的这个博主的文章,我觉得写的很好。具体的例子见链接:https://blog.csdn.net/JLongSL/article/details/54885780
    所以此时接口的好处就来了。因为前面我们也说过,接口就是一个方法的抽象。而这里恰恰就可以使用 接口来实现。我们让Dog类和Snake类去实现Hunt这个接口就好了。然后也就可以实现多态了。

    接口与抽象类的自己的一点总结

        抽象类的功能应该远远多于接口。但是定义抽象类的代价是比较高的。因为像java,C#这样的高级语言,是不允许多继承的所以,你在设计一个父类为抽象类的时候,一定得将这个类的子类所有的共同属性和方法都定义出来;但是接口可以不用这样。因为接口是一个方法的集合,一个类可以实现多个接口。所以,你的接口里面只有一个方法,还是两个方法,都是可以的。之后如果还有新的方法,我大不了再设计一个接口就是了。所以说,抽象类的设计必须谨慎,接口的设计很灵活。

    展开全文
  • 原文地址http://www.cnblogs.com/111testing/p/8495652.html Java接口和抽象类区别 Java接口和抽象类区别

    原文地址http://www.cnblogs.com/111testing/p/8495652.html

    Java接口和抽象类的区别

    Java接口和抽象类的区别



    展开全文
  • java接口和抽象类区别

    万次阅读 多人点赞 2018-09-21 23:18:35
    接口和抽象类区别? 接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制。 接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现。 抽象类是可以有...
  • 一、Java接口和抽象类区别

    千次阅读 2019-10-24 15:41:23
    Java接口和抽象类区别
  • Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,他们的区别如下: 1 Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以(就是interface中...
  • JAVA接口和抽象类区别

    千次阅读 2015-11-04 20:35:09
    JAVA接口和抽象类区别  学过C++的朋友应该知道,在C++中并没有显式地区分出接口这个概念,但是在C++中可以定义类似于JAVA中的接口抽象类实现接口的功能。JAVA中将接口抽离出来,作为一个单独的形式存在,...
  • 深入理解Java接口和抽象类

    千次阅读 2020-07-06 10:46:54
    抽象类和接口区别①、语法层面上的区别②、设计层面上的区别③、举例说明 深入理解Java接口和抽象类   对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和...
  • 1 继承抽象类 继承普通类 有声明区别啊? as:当然有区别了,继承抽象类必须重写或说实现抽象类里的所有抽象方法,普通类看情况而定比较随意。...2 java 抽象类和java接口类有什么区别 抽象类( abstract meth
  • Java接口和Java抽象类

    千次阅读 2010-08-23 00:13:00
    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解。刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有方法名,没有...
  • java接口和Java抽象类

    2009-07-17 07:36:00
    本文转自:http://hi.baidu.com/snps0201/blog/item/f9c9f8fa77bfaadeb58f31aa.html 在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解。 刚学Java语言时,就很难...
  • 1、Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。 如果向一个抽象类里加入一个新的具体方法时,...
  • Java接口和抽象类,傻傻分不清楚?

    千次阅读 多人点赞 2019-04-26 07:28:15
    再来聊聊接口和抽象类
  • java 接口和抽象类区别

    万次阅读 2018-07-16 19:35:52
    首先,要强调一点的是,抽象类是类,因此它们不受Java中接口的其他限制,例如抽象类可以拥有状态,但你不能在Java接口上拥有状态。 区别 abstract class interface 语法结构 abstract interface ...
  • java接口和抽象类区别

    多人点赞 2018-04-10 15:47:30
    接口1 因为java不支持多重继承,所以有了接口,一个只能继承一个父类,但可以实现多个接口接口本身也可以继承多个接口。2 接口里面的成员变量默认都是public static final类型的。必须被显示的初始化。3 接口...
  • 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法一些具体...
  • java接口抽象类区别 在java中抽象类和接口,它们之间很相似但是也有区别 今天我就以我的理解,来阐述一下它们之间的区别: 1.抽象类中可以有一个或多个抽象方法,而接口中的方法必须都是抽象方法 2.接口中定义...
  • Java接口和抽象类区别与联系

    千次阅读 2015-05-10 14:14:28
    Java中接口和抽象类区别与联系1. 抽象类: (1)....Java抽象类和Java接口一样,都用来声明一个新的类型。并且作为一个类型的等级结构的起点。 (2).格式: public abstract class abstractDemo{
  • Java 抽象类,抽象方法和接口

    千次阅读 2015-03-26 20:50:40
    讲述Java抽象类,抽象方法和接口的各种用法。
  • java中的抽象类和接口的一些区别

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 498,685
精华内容 199,474
关键字:

java接口类和抽象类的区别

java 订阅