一、两者相同点
1、不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
2、抽象类里的抽象方法必须全部被子类所实现,子类不能全部实现父类抽象方法,那么该子类还只能是抽象类。一个类实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
二、两者不同点
1、默认的方法实现
抽象类可以有默认的方法实现;接口,Java8规定可以为接口提供默认实现的方法并且不用强。
2、实现
制子类来重写子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要重写抽象类中的抽象方法;接口子类使用关键字implements 来实现接口,它需要重写接口中没有默认。
3、构造器
抽象类可以有构造器,接口不能有构造器。
4、与正常Java类的区别
除了不能实例化抽象类之外,和普通Java类没有任何区别;接口是完全不同的类型外。
5、访问修饰符
抽象方法可有public.protected和default、abstract修饰符。不能用privatestatic.synchronize、 native 修饰。
接口属性默认修饰符是publicstatic final (必须赋初值) ,方法默认修饰符是publicabstract. Java8 开始出现静态方法,多加static关键字。
6、main方法
并且可以运行它;接口没有main方法,因此不能运行它。
7、多继承
抽象类可以继承一个类和实现多个接口;接口只可以继承一个或多个接口。
抽象类的运用意义
在面向对象方法中,抽象类主要用来进行类型隐藏。构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。
这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。
由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。
为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。
扩展资料:
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。
抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。
参考资料:抽象类百度百科 接口百度百科