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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦守志 中级黑马   /  2014-12-25 10:18  /  1131 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

abstract class和interface有什么区别?

1 个回复

倒序浏览
看见楼主的问题,我自己整理了一下。希望可以办到你。有疑问回复我多交流。

从特性来看
1.抽象类:含有抽象方法的类只能定义成抽象类。
抽象类不能被实例化,也即不能使用new关键字来实例化抽象类。
2.接口:是一个完全抽象了的类,没有任何东西可以被子类来继承了。

从实现子类的角度来看
1.子类与抽象类的关系,可以类比为”父子”关系,一个儿子只能有一个父亲。即一个子类只能继承一个抽象类。这是java所特有的,因为多继承会造成复杂性。
2.子类与接口的关系。可以类比为”师徒”关系,一个徒弟可以有多个师傅。即一个子类可以实现多个接口。类之所以可以实现多个接口,是因为接口只有抽象成员,所以复杂度大大的低于抽象类,不会造成复杂性。
3.一个子类可以继承一个抽象类,同时实现多个接口。

从抽象类及接口的成员来看
抽象类:
1.抽象方法没有方法体。格式:public abstract methodName();。
2.同时包含普通成员变量(没有抽象变量这一说),普通方法,抽象方法(抽象方法定义为:abstract methodName() )。子类必须实现所继承抽象类的抽象方法。

接口:接口类的成员中有且只有抽象方法,
1.接口中只有两个内容:
常量:默认修饰为 public static fianl。
方法:默认修饰为 public abstract。格式为:public abstract methodName()
2.接口中无论是常量还是方法,都是public的,因为本身自己不能被实例化,只有公开成员,才能实现自己的意义。

从规范的角度来看
接口是比抽象类还要抽象的类,其完全抽象。因此可以更加规范的约束子类,从而做到了规范 与 具体实现的分离。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马