接口是构造软件松耦合的重要法宝。在java中,接口被设计为只描述类应该做什么,而不涉及任何具体的实现细节。因此,它不能实例化,不能包含构造方法也不能包含实例变量。
抽象类的合理使用可以提高软件的开发效率和代码的重用度。它和接口一样位于抽象层,可以包含抽象方法,但是它可以包含部分实现。
它们二者的不同点,主要体现在两点。
接口可以多继承,抽象类只能单继承。
接口不包含任何具体实现,但是抽象类可以有部分实现。在编码上的表现就是接口不能实例化,没有任何构造函数和实例变量。抽象类可以自己实现了的方法和构造函数以及实例变量。
abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,体现的是继承的关系;interface表示的是"like-a"关系,体现的是一种契约关系,并不要求interface的实现者和interface定义在概念本质上是一致的。
抽象类可以认为是接口和类的过度,它实现了通用的方法函数,指定了一些特殊方法函数留给子类来实现,从而提高软件的开发效率和代码重用度。接口在系统外界使用者来看提供了可使用的服务,对系统内部来看指定了系统必须实现的服务,从而大大降低了软件的耦合度。
抽象类:
1、抽象类的visibility可以是public也可以是default。不可以是private、final、protected。
2、Abstract类不可以直接实例化。
3、抽象类可以有实例变量,静态的非静态的都可以。
4、抽象方法不可以被final、static、private修饰,因为这些方法不能被继承。抽象方法可以是public也可以是protected。
接口:
1、接口的visibility可以是public也可以是default。不可以是private、final、protected。
2、不可以具有实例变量。成员变量默认为public static final。必须初始化。
3、方法默认是public abstract。
分享到:
相关推荐
java利用接口和抽象类改写求圆的面积和梯形的面积.docx
在上面的练习中,我们使用抽象类和接口来实现多态性。在 LivingThing 抽象类中,我们定义了一个抽象方法 dance(String dancingStyle),然后在 Human 和 Monkey 中实现了该方法。在 PersonInterface 接口中,我们定义...
11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别....
10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和...
接口与抽象类的区别 抽象方法是必须实现的方法。就象动物都要呼吸。但是鱼用鳃呼吸,猪用肺呼吸。 动物类要有呼吸方法。怎么呼吸就是子类的事了。 现在有很多讨论和建议提倡用interface代替abstract类,两者从...
4.实现抽象类和接口的类必须实现其中的所有方法。 抽象类中可以有非抽象方法。接口中则不能有实现方法。如果接口或者抽象类的子类不想实现则继续携程一个抽象方法 5.接口中定义的变量默认是public static final ...
通过接口和抽象类,我们可以定义一组规范和行为,让不同的类具备相似的功能,并通过多态性来实现灵活的代码设计。接口适用于定义纯粹的行为规范,而抽象类适用于定义一些通用的方法和字段,并提供一些默认的实现。
抽象类和接口的区别 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持...
简述抽象类和接口的区别-java接口和抽象类异同.docx
在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。我们一起来学习一下Java中的接口和抽象...
java学习笔记接口和抽象类
接口和抽象类的比较.pdf
Java基础知识:接口和抽象类
Java开发接口和抽象类的区别共2页.pdf.zip
(3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,...