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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangcy 中级黑马   /  2014-7-9 20:16  /  2380 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象类和接口的区别:
相同点:
1、抽象类和接口中都有抽象方法;
2、抽象类和接口都不能直接创建对象(被实例化),需要实体类继承抽象类或实现接口并实现所有的抽象方法后,才可以创建对象;
不同点:
1、从成员变量上,抽象类可以有任何形式的成员变量,而接口中只能有以static final修饰的成员变量;
2、从方法上,抽象类中既可以有抽象方法,又可以有非抽象方法,而接口中只能有抽象方法;
3、从继承上,一个实体类只能继承一个抽象类,但可以实现多个接口;

15 个回复

倒序浏览
总结的,不错
回复 使用道具 举报

我是来拿黑马币的。:)
回复 使用道具 举报
受教了。。
回复 使用道具 举报
另外子类继承父类可以不一定重写父类抽象方法,但是子类也就变成了一个抽象类,而实现接口必须实现所有方法
回复 使用道具 举报
学习了。。
回复 使用道具 举报
还不错~
回复 使用道具 举报
抽象类中也可以没有抽象方法
回复 使用道具 举报
:handshake
回复 使用道具 举报
总结得不错啊。。。如果我的技术分够多,我都想给你加点。
回复 使用道具 举报
恩,总结的很不错。~接口和抽象类的概念很容易混淆。
个人感觉,抽象类是一个类,他具备类的一些特征,如可以单继承,可以有继承体系。但是类中的方法只有方法声明,而没有方法体,这是用abstract来修饰方法和类名,这样构造了抽象类。我们创建类是为了描述一类事物的属性和行为,类就像是图纸。是为了创建对象而存在的。那么使用这些属性和行为一定要创建对象。所以抽象类需要子类并且覆盖抽象类中的所有抽象方法,才可以实例化,否则,该子类还是一个抽线类。当然抽象类可以封装私有属性,但是要对外提供set,get方法。我们也可以在抽象类中定义空参和带参数的构造函数,可以对子类的创建对象的时候初始化。这是我个人理解的抽象类。
接口中的理解就是首先他是功能的扩展,我们说子类继承父类关系时必须要有所属的关系,ls a的时候才可以实现继承的关系。那么我想要获取不同属性事物的功能,怎么办呢?这时候可以用接口来实现。降低了程序的耦合性。假若需要更改错误的时候,只需要单独对一个接口进行修改就可以,而不必连关联的类也修改。是对外暴露的规则。接口是需要实现并且覆盖它的所有抽象方法才可以创建对象,否则实现该接口的类还是抽象类。简单理解就是,接口中的所有方法都是抽象方法。必须被实现接口类全部复写,该类才可以实例化。
另外,要注意的是,接口的修饰符是固定的。即使不写,JVM也会默认使用固定的修饰符。
成员变量 public static final
成员方法 public abstract
这是我个人的一点理解。希望和大家分享一下~
回复 使用道具 举报
路过  学习了
回复 使用道具 举报
我进来混经验的
回复 使用道具 举报
总结的还不错
回复 使用道具 举报
崔MQ 中级黑马 2014-7-10 12:54:17
15#
还有从层次上,继承有层次关系,而实现无层次关系,属于评级的。
回复 使用道具 举报
学习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马