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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 焚雨成灰 中级黑马   /  2014-3-12 08:18  /  1124 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题,另外既然抽象方法全部可以定义在接口中,非抽象方法可以定义在普通类中,那抽象类存在的意义是什么

6 个回复

倒序浏览
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,

另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.

评分

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

查看全部评分

回复 使用道具 举报
抽象类可以理解成系统实现过程中的中间产品,在其内已经实现了系统的部分功能,但仍需要通过进一步完成。一般用于模板式设计,即可以作为多个子类的通用模板,子类在抽象类基础上进行扩展,改造,但在总体上会大致保留抽象类的行为方式。

评分

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

查看全部评分

回复 使用道具 举报
抽象类的特点:
1. 抽象方法一定在抽象类中;
2. 抽象方法和抽象类都必须被abstract关键字修饰;
3. 抽象类不可以用new创建对象,因为调用抽象方法没有意义;
4. 抽象类中的抽象方法要被使用,必须由子类复写其所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

接口可以理解为是一个特殊的抽象类。接口中的方法全都是抽象方法,而抽象类中可以有普通方法。
普通类与接口之间是实现的关系,而且可以是多实现。而普通类与抽象类之间还是继承关系。

评分

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

查看全部评分

回复 使用道具 举报
举个例子:比如说一个教师,我们把它作为一个抽象类,有自己的属性,比如说年龄,教育程度,教师编号等等,而教师也是分很多种类的,我们就可以继承教师类而扩展特有的种类属性,而普遍属性已经直接继承了下来。
而接口,还是拿教师做例子,教师的行为很多,除了和普通人相同的以外,还有职业相关的行为,比如改考卷,讲课等等,我们把这些行为定义成无body的方法,作为一个集合,它是一个interface。而教师张三李四的各自行为特点又有不同,那么他们就可以扩展自己的行为body。从这点意义上来说, interface偏重于行为。

两者从理论上可以做一般性的混用,但是在实际应用中,他们还是有一定区别。抽象类一般作为公共的父类为子类的扩展提供基础,这里的扩展包括了属性上和行为上的。而接口一般来说不考虑属性,只考虑方法,使得子类可以自由的填补或者扩展接口所定义的方法。接口是公开的,里面不存在私有方法或变量。接口可以实现多重继承,而一个类只能继承一个超类。接口中的方法都是抽象方法,而抽象类不一定都是抽象方法。

评分

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

查看全部评分

回复 使用道具 举报 2 0
他们的不同点:

1.抽象类中可以有非抽象的方法而接口中只能够有抽象的方法!

2.一个子类可以继承多个接口,而一个类只能继承一个抽象类!

3.接口的使用方式通过implements关键字进行,抽象类则是通过继承extends关键字进行!

4.在声明上

接口中只能声明抽象方法(包括静态抽象方法)和静态变量.而抽象类除了包含一般类的特点,即包括属性和一般方法外,还可以声明抽象方法(包括静态抽象方法).

5.在写法上

一、接口中的抽象方法前不用也不能加abstract关键字,默认隐式就是抽象方法,也不能加final关键字来防止抽象方法的继承.而抽象类中抽象方法前则必须加上abstract表示显示声明为抽象方法.

二、接口中的抽象方法默认是public的,也只能是public的,不能用private、protected修饰符修饰.而抽象类则可以。

6. 一个非抽象类如果extends一个抽象类后只需(并且必需)所有的实现抽象方法就行了,非抽象方法可以不实现。如果implements一个接口,就必须实现接口中的所有方法(因为接口中的方法均为抽象方法);

评分

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

查看全部评分

回复 使用道具 举报
他们的不同点:

1.抽象类中可以有非抽象的方法而接口中只能够有抽象的方法!

2.一个子类可以继承多个接口,而一个类只能继承一个抽象类!

3.接口的使用方式通过implements关键字进行,抽象类则是通过继承extends关键字进行!

4.在声明上

接口中只能声明抽象方法(包括静态抽象方法)和静态变量.而抽象类除了包含一般类的特点,即包括属性和一般方法外,还可以声明抽象方法(包括静态抽象方法).

5.在写法上

一、接口中的抽象方法前不用也不能加abstract关键字,默认隐式就是抽象方法,也不能加final关键字来防止抽象方法的继承.而抽象类中抽象方法前则必须加上abstract表示显示声明为抽象方法.

二、接口中的抽象方法默认是public的,也只能是public的,不能用private、protected修饰符修饰.而抽象类则可以。

6. 一个非抽象类如果extends一个抽象类后只需(并且必需)所有的实现抽象方法就行了,非抽象方法可以不实现。如果implements一个接口,就必须实现接口中的所有方法(因为接口中的方法均为抽象方法);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马