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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 温立华 中级黑马   /  2013-3-18 21:46  /  2321 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 温立华 于 2013-3-18 22:48 编辑

abstract class和interface有什么区别?

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢  发表于 2013-3-18 22:21

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

6 个回复

倒序浏览
class 是普通类
abstract 是抽象类
interface 是接口,让普通类可以继承他派生出有一定相同点的不同类

范围作用一般是:interface > abstract       abstract  > class
比如:你创建一个图形的接口interface,然后创建了2个abstract 抽象类,圆形和三角型
你由于需要,实现了圆形的普通类: 正圆和椭圆
抽象类和接口不能创建对象  只有让派生类继承他们来创建对象

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王亚飞 于 2013-3-18 22:05 编辑

最近刚好看到这
abstract class抽象类,interface接口
abstract class不能用new创建对象,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用
interface 接口,同样不能创建对象,因为有抽象方法,从接口的格式就可以看出来因为接口中的方法必须定义成public abstract void xxx();


抽象类中可以有抽象方法,也可以没有,但是接口中的方法都是抽象方法


其实也可以这么理解interface是抽象类的另一种,因为interface中的方法都是抽象的,我觉得interface的出现就是弥补了java不能多继承,有了interface,java中就可以多实现比如
class A extends B implements c,d

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
接口,初期理解可以认为是一个特殊的抽象类,方抽象类的方法都是抽象的,那么该类可以通过接口的形式来表示。
1、接口的成员有固定的修饰符public
2、接口可以被多实现,抽象类间为单继承。
回复 使用道具 举报
abstract class抽象类,interface接口。
class可以不需要用abstract修饰,当然用abstract修饰了的类就是抽象类。
接口也属于抽象类,但interface必须使用abstract修饰。有时你看不到使用了,或省了不写,java编译器会在编译时默认加上。
但abstract class前的abstract必不可少。。。
接口中可以没有任何抽象方法。类则不然。
回复 使用道具 举报
一、抽象类(abstract class)
抽象类中的方法可以是抽象的也可以是非抽象的(包含两个特殊的情况,全部是抽象方法和全部是非抽象方法)。对于抽象类中的方法全部是非抽象的情况,这是为了传宗接代-----强制让其子类继承
二、接口 (interface)
接口中的方法必须全部是抽象的,并且有默认的public abstract修饰,所以要注意一点,当子类实现接口的时复写接口中的方法要注意权限的问题;接口里面的成员变量有默认的public static final 修饰,所以要注意,这些成员变量只允许读,不允许写
三、二者用法上的不同
对于java只支持单继承,为了解决这个问题java提供了多实现机制。二者用法的不同,抽象类被继承复写方法是正常的按部就班的使用,而接口是为了补充添加的作用。例如在集合框架中,TreeSet这个容器要想存储不重复的学生对象(学生对象是从人继承而来的),那么需要怎么做呢?由于学生继承人,学生没有比较的特性,但是java提供了一个接口Comparable,此接口强行对实现它的每个类的对象进行整体排序,那么只需要让学生类实现Comparable接口即可使其具有比较性(这时Comparable接口就是补充学生类的特性----使其有比较性)
另:若二者中的抽象方法不全被子类对象复写实现,那么得到的子类是抽象类。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

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

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。

下面比较一下两者的语法区别:

1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。

两者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

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