java面试(7): 抽象类和接口区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yz_cfm/article/details/85779875

    先笼统的说一下抽象类和接口的区别以及我们在实际使用中怎么去选择使用接口还是抽象类?
    首先我们要明白,抽象类是对类的抽象,而接口是对行为的抽象。了解了这个概念后一切都好办。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口只是对类的局部(行为)进行抽象。举个例子,猫和狗都是动物,此时我们可以把猫和狗共有的属性和行为抽取出来定义一个抽象的类---Animal 类,然后 Dog 和 Cat 类就可以继承 Animal 类,然后实现自己各自的行为和属性,它们与 Animal 存在 "is-a" 的关系;但是接口仅仅是对行为的抽象,比如鸟和飞机都会飞,但是他们飞的行为不一样,我们就可以定义一个 fly 的接口,然后鸟和飞机都可以实现此接口来完成飞的动作,但是本身鸟和飞机之间并没有什么必然的联系,接口只是定义一个实现该行为的规范而已。

具体区别:
1.  抽象类通过 abstract 关键字来定义,然后子类通过 extends 继承该抽象类后并实现相应抽象方法;接口通过 interface 关键字来定义,子类通过 implements 来实现该接口中的所有方法。
2. 抽象类中的抽象方法可以使用 public、protected、default 修饰符;接口中的抽象方法默认并只能是 public,并且成员变量默认为 public static final 修饰的,所以我们可以直接通过 接口名.成员变量  使用它。
3. 抽象类中允许有非抽象的方法和成员变量包括构造方法; 接口中的方法全是抽象的,不能有方法的实现。
4. 子类只能通过继承来实现抽象类,由于 java 中的单继承特性,就导致只能继承一个抽象类;但是子类可以实现一个或多个接口,在一定程度上,这就解决了由于单继承特性所带来的问题。
5. 从作用上来看,抽象类是为了把相同的东西提取出来,即重用;接口是为了把程序进行模块化,可以降低程序的耦合。

猜你喜欢

转载自blog.csdn.net/yz_cfm/article/details/85779875