欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

理解性记忆抽象类和接口的区别

程序员文章站 2022-03-02 23:36:38
抽象类和接口的区别是面试和平时常见到的一个问题,这里主要可以从两个方面去看他们的区别,首先是在语法上的区别很多小白(包括我)在刚开始去看接口和抽象类时总是去死记硬背他们的区别,但是其实可以从另一个角度去看首先抽象类,无论如何,它也算是一个类,所以可以罗列以下几点1.既然是类,那么它就会有构造函数,而反观接口,则没有自己的构造函数,2.再从成员方法去看,一个类即可以有抽象方法和非抽象方法,但是接口只能有抽象方法,无论你是否写出方法的修饰符,接口中方法的修饰符默认都是public abstract,并...

抽象类和接口的区别是面试和平时常见到的一个问题,这里主要可以从两个方面去看他们的区别,首先是在语法上的区别
很多小白(包括我)在刚开始去看接口和抽象类时总是去死记硬背他们的区别,但是其实可以从另一个角度去看
首先抽象类,无论如何,它也算是一个类,所以可以罗列以下几点
1.既然是类,那么它就会有构造函数,而反观接口,则没有自己的构造函数,
2.再从成员方法去看,一个类即可以有抽象方法和非抽象方法,但是接口只能有抽象方法,无论你是否写出方法的修饰符,接口中方法的修饰符默认都是
public abstract,并且你不能尝试去修改
理解性记忆抽象类和接口的区别

3.从成员变量来看,类可以有静态和非静态变量,但是接口只能有静态成员变量
4.从修饰符来看,抽象类的修饰符我们可以自己选择,但是接口中的默认修饰符总是public static,无论你是否写出来
理解性记忆抽象类和接口的区别
就是图中灰色的地方,无论你是否写出来,都会存在,并且你不能尝试去修改它的默认修饰符

那么以上是语法上的区别,那么为什么java中允许多实现但是不允许多继承呢?这也是下面要说的应用上的区别
如果你现在有class A{
void fun(){
system.out.print(“a”);
}

class B{
void fun(){
system.out.print(“b”);
}

class C extend A,B(这里是不允许这样写的,只是为了给大家演示为何不能多继承{

void fun()
{
system.out.print(“a”);
}
void fun(){
system.out.print(“b”);
}
}
如果java允许这样写的话,那么问题来了,当你使用c的实例去调用fun()方法的时候,怎么知道你调用的是哪一个呢?这也就是java不允许多继承的原因,那么为什么能多实现呢?

public interface aa {
    void fun();
}

public interface kk {
    public static final int a=10;
    public abstract void fun();
}

public calss C implements aa,kk{
void fun(){}
}

这里就不会出现上面多继承出现的问题,因为接口里的方法都没有具体的实现,所以你去实现这两个接口时,只会让你实现一个fun()方法,因此可以使用多实现来减少代码的复杂性

第一次写博客,有不足或者知识点有错会虚心接受,欢迎补充

本文地址:https://blog.csdn.net/qq_43716944/article/details/109860628