黑马程序员技术交流社区
标题:
abstract class和interface有什么区别?
[打印本页]
作者:
郭炜
时间:
2012-3-14 11:31
标题:
abstract class和interface有什么区别?
abstract class和interface有什么区别?
作者:
薛波
时间:
2012-3-14 11:37
抽象类:对事物描述的时候,有些地方不能具体描述,或描述不清楚时就要用到抽象。
1抽象方法一定在抽象类中。
2抽象方法和抽象类必须被abstract修饰。抽象类不可以被new创建,因为调用抽象方法没意义。
4.抽象类中方法被使用必须由子类复写所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法那么该类还是一个抽象类。
抽象类只能被继承也就是说只能继承一个。
接口:定义的格式特点:
1.接口中常见定义:常量,抽象方法;
2.接口中的成员都固有的修饰符:常量:public static final 方法:public abstract
注意:接口中的成员都是public修饰的;接口是不可以被创建对象的,因为有抽象方法。需要被子类实现,子类对接口中的抽象方法全部都覆盖后,子类才可以被实例化。否则子类也是一个抽象类。
一个类可以实现多个接口。(不能多继承,但是可以多实现) ****但是接口和接口之间可以多继承(因为没有方法体,可以随便继承。)
如interface A extends B,C (abc都是接口)
特点:是一种规则,降低了耦合性,提高了功能扩展。
作者:
潘许超
时间:
2012-3-14 11:40
抽象类的特点:
1抽象方法一定在抽象类中
2抽象方法和抽象类都必须被abstract关键字修饰
3抽象类不可以用new创建对象,因为调用抽象方法没有意义
4抽象类中的抽象方法要被调用,必须由子类复写其所有的抽象方法后建立子类调用。
如果子类值覆盖了部分抽象方法,那么这个子类还是一个抽象类。抽象可以强制子类做一些事情。
抽象类可以有抽象方法也可以有非抽象的方法。
抽象类和一般类没有太大的不同,该怎么样描述事物就如何描述事物。只不过该事物中出现了一些看不懂的东西。这些不确定的部分,也是该事物的功能,需要明确出现,但是无法定义主体。通过抽象方法来表示。
1抽象类比一般类多了抽象方法。就是可以再类中可以定义抽象方法。
2抽象类不可以实例化。
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类创建对象。
抽象类中可以不定义抽象方法,也可以使该类不能创建对象。
接口:格式:interface{}
接口中的成员修饰符是固定的。
成员变量:public static final
成员函数:public abstract
接口的出现将“多继承”通过另一种形式体现出来,即“多实现”
接口:初期理解,可以认为是一个特殊的抽象类
当抽象类中的方法都是抽象的,那么该类可以用接口的形式来表示
class用于定义类,interface可以用于定义接口
接口定义时,格式他点:
1接口中常见的定义:常量,抽象方法
2接口中的成员都有固定修饰符
常量:public static final
方法:public abstract
接口中的成员都是public的。在interface中都有固定的修饰符。接口不能创建对象。
父类中有非抽象内容可以拿来用这是继承,在接口中子类必须把抽象方法实现后,才可以实例化。
接口是不可以创建对象的因为有抽象方法,需要被子类实现,子类需要对接口中的抽象方法全部覆盖后,子类才可以实例化。否则这类还是一个抽象类。
interface 也是生成class文件。
接口的特性:接口可以被类多实现。也是对多继承不支持的转换形式,java支持多实现。即使有同名函数也因为没有方法主体,所以只用覆盖一次即可。
接口也接口之间也有关系。接口之间可以多继承。但是同名方法的返回值必须一样。java支持多继承,只有在接口与接口之间可以实现多继承。类之间只有单继承。
接口的特点:
1接口对外暴露的规则。
2接口是程序的功能的扩展
3接口可以用来多实现
4类与接口之间是实现的关系,而且类可以继承一个类的同时实现多个接口。
5接口与接口之间可以有继承关系
作者:
崔岩
时间:
2012-3-14 11:48
本帖最后由 崔岩 于 2012-3-14 12:03 编辑
个人觉得,应该是现设计了抽象类,而后由于java决定不支持多重继承,而有时候又有这个需要,所以出现了接口。
抽象类也是类,不可以多重继承。
接口,可以多重实现。
因此当有的类,需要继承多个外界个体(类和接口)的属性时,就可以这样设计层次:以一个抽象类作为父类,包含所有子类都有的主要属性。在有一些独立的接口,这些接口的属性不是所有子类都需要的,是可选的。这样子类就可以继承抽象类,并且自行选取一些接口来实现。
哈哈哈哈,我给你举个搞笑例子:葫芦娃!(别说你没看过) 现在抽象类就是小孩,葫芦娃七兄弟就是七个子类,小孩中定义了正常孩子的属性,而葫芦娃s肯定比正常孩子多一些功能,比如喷火,千里眼什么的,而这些兄弟互相也有区别,所有有一些独立的接口表示 喷火,千里眼,顺风耳等功能。这样某一个葫芦娃就可以继承小孩,并且实现某几个功能接口。
作者:
杨华威
时间:
2012-3-14 17:31
抽象类属于类,不支持多继承。
接口之间支持多继承。
作者:
lucky_xingxing
时间:
2012-3-14 18:58
含有抽象方法的类必须是抽象类,抽象类不能被实例化,抽象类中不一定包含抽象方法,抽象类中的抽象方法必须在子类中实现,如果子类没有实现那么子类也必须是抽象类,不能有抽象构造方法和抽象静态方法
接口是抽象类的特例,接口中的所有方法必须是 public abstract 的 接口中的成员变量必须是public static final 的
1.抽象类可以有构造方法,接口中不能有构造方法
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的
4.抽象类中可以包含静态方法,接口中不能包含静态方法
5.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型
6.一个类可以实现多个接口,但只能继承一个抽象类
作者:
张润政
时间:
2012-3-14 19:14
楼上已经说得很好了。我再补充一点自己看法。
第一,不管是抽象类还是接口,它们里边的抽象方法,都是其子类压缩抽取出来的共性属性,但是具体的实现肯能不一样,所以需要子类去复写这个方法,来实现具体的内容。
第二,不管是抽象类,还是接口,我们都要在复写了其所有的抽象方法之后才能创建它子类的对象或者其实现类的对象。
至于抽象类或者接口为什么不能建立对象,是因为
当这个类中有了抽象方法,作为类的成员存在,那么这个类如果建立对象,再去调用这个没有方法主体的抽象方法,是没有任何意义的
故此,抽象方法也要存放在抽象类中。并且这个类不能建立对象,因为声明了抽象的类,说明类当中有抽象方法,你不能创建一个你看不懂,而且调用函数无意义的类的对象。
作者:
冯建鹏
时间:
2012-3-15 02:05
简单来说,
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,
另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2