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

抽象类和接口的区别是面试和平时常见到的一个问题,这里主要可以从两个方面去看他们的区别,首先是在语法上的区别

首先抽象类,无论如何,它也算是一个类,所以可以罗列以下几点
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()方法,因此可以使用多实现来减少代码的复杂性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值