A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 薛旻 中级黑马   /  2014-3-3 17:43  /  1001 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象类和接口的区别?

11 个回复

倒序浏览
最大的区别就是一个类可以实现多个接口,但不能继承多个抽象类吧。所以,接口比抽象类应该更灵活。
抽象类里可以有不是抽象的方法,接口中的方法都是抽象的。
回复 使用道具 举报
volvoxc 发表于 2014-3-3 17:56
最大的区别就是一个类可以实现多个接口,但不能继承多个抽象类吧。所以,接口比抽象类应该更灵活。
抽象类 ...

那么抽象类的存在有什么意义?
回复 使用道具 举报
我理解比较浅,接口是核心,其定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。 如果许多类实现了某个接口,那么每个都要用代码实现那些方法 。如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现。 我觉得抽象类有点儿像接口和实现类之间的桥梁,是抽象和具体之间的桥梁。
回复 使用道具 举报
抽象类里的方法是用abstract修饰的,接口里的方法不用abstract修饰,两个相同点是,方法体都没有实现
回复 使用道具 举报
抽象类:当多个类出现相同的功能,但是功能的主体是不一样的,这时候,可以对这多个类的该功能进行向上抽取,抽取到仅仅定义功能的名称,但是不抽取功能的实现体。方法就是抽象方法,所属的类就是抽象类。
抽象类的特点:

1:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰(可以描述类和方法,不可以描述变量)。
2:抽象方法只定义方法声明,并不定义方法实现。
3:抽象类不可以被创建对象(实例化)。
4:只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。
5: 抽象类只能单继承。
接口:关键字是interface。
接口特点:
接口中可以定义常量和抽象方法
接口中的成员都有固定的修饰符:
接口中常量默认修饰符:public final static===>默认是全局常量。这三个修饰符少些哪几个,系统就会补全哪几个
接口中的方法是默认修饰符:public abstract===>默认是公共抽象方法
      这两个修饰符少些哪几个,系统就会补全哪几个

开发时一般基本功能定义在抽象类/类中, 扩展功能定义在接口中

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
  含有abstract修饰符的class 即为抽象类,abstract类不能创建实例对象,含有abstract的方法的类必须定义为abstract class ,abstract class 里的方法不必是抽象的,抽象来中定义抽象方法必须放在具体子类中实现,所以呀,不能有抽象的构造方法或抽象的静态方法,如果子类没有实现抽象父类中的所有 方法,那么,子类也必须定义为抽象类。

     接口(interface)可以说成是抽象类的特例。接口中的所有方法都必须是抽象的,接口中的方法定义默认为public  abstract 。接口中的变量是全局常量,即public static final修饰的。

     看一下他们在语法上的区别吧!

   1,抽象类里可以有构造方法,而接口内不能有构造方法。

   2,抽象类中可以有普通成员变量,而接口中不能有普通成员变量。

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

   4,抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

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

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

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

再补充点两者在应用上的区别:

   接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
最主要的区别是抽象类不能被多继承,接口可以被多实现,接口算是对多继承的一种补充,另外,接口中的方法必须全部实现,而抽象类不用,接口中函数默认为public abstract方法,变量默认为public static final
这也是我学习的一点总结,可能还不够全面,希望多多学习
回复 使用道具 举报
一、抽象类中可以有普通的成员变量,接口里的变量默认是用public static final标识
二、抽象类可以有非抽象的方法,接口不行
三、抽象类不能被多继承,接口可以被多实现

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
      当编写一个类,其定义的一些行为方式无法准确的描述,也就是说某一个父类只知道其子类应该包含怎样的方法,但无法准确的知道子类的实现方式。这个时候我们可以将这些方法进行抽象,将这些方法加入abstract关键字,使这些方法变为抽象方法(抽象方法是只有方法名而不提供具体实现的方法)。
      有抽象方法的类称为抽象类,但一个抽象类中可以没有抽象方法。抽象方法和抽象类的规则如下:
      a:抽象类和抽象方法必须使用abstract进行修饰,抽象方法不能有方法体;
      b:抽象类无法实例化,也就是说无法使用new关键字来构造实例,即便是抽象类中没有抽象方法;
      c:抽象类中的构造器不能用于创建实例,用于子类的调用;
      d:abstract修饰的抽象方法必须被子类重写才有意义,因此抽象方法不能定义为private访问权限,不能让private与abstract同时修饰方法。
      e:含有抽象方法、继承抽象父类但没有完全实现抽象方法、实现了一个接口却没有完全实现接口包含的所有抽象方法,这三种情况下的类是抽象类;
      抽象类是从多个具体类中抽象出的父类,具有更高层次的抽象。从共同特征中抽象出一个抽象类,将这个抽象类作为基点,约束子类的设计。抽象类体现的是一种与C++模板相似的设计思想,子类在模板上进行拓展与实现。这种模板设计模式是常见的设计模式。

  接口是一种更加彻底的抽象,接口中不能包含普通方法,只有抽象方法。接口是从多个相似类中抽象出来的规范,接口不提供任何实现,体现的是设计与实现分离的哲学。
      接口定义的是多个类的公共行为规范,这些行为是外部交流的通道,也就是说接口中是公用方法。定义接口要采用interface关键字,虽然说Java不允许类的多继承,但是接口之间存在多继承,类也可以实现多个接口,接口支部包含构造器和初始化快的定义。。由于接口是一种规范,因此说接口不应该经常改变,接口的改变对其他类的影响很大。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
区别:1.抽象类可以有非抽象的方法,接口都是抽象的方法和常量  2.抽象类有构造方法,但是不能创建对象,接口没有构造方法。3,抽象类,一般用于同一体系的共性的抽取,单继承。接口,一般是额外功能的抽取,一种协议,可多实现

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,比如狗,猫,猪,鸟等都是动物,但动物是狗是猪么?不能一概而论,所以动物是抽象出来狗猫都有得特征,他们的属性方法就可以在接口里面实现,然后每一种动物还有他自己的特有方法,比如狗看家,猫抓老鼠,等.用抽象类里面的方法时,子类要重写父类方法.

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马