浅谈抽象类和接口的异同

什么是抽象类?

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类的特点:

1.与普通类一样,只能单继承;

2.成员变量可以是常量也可以是变量;

3.与普通类一样,有构造方法,但是不能实例化。构造方法的作用是子类继承抽象方法后进行父类数据的初始化;

4.成员方法既可以是抽象的,也可以是非抽象的;但所表述的意义不同:抽象方法是强制要求子类实现的,非抽象方法可以被子类继承,提供搞代码的复用性;

由于抽象类无法直接创建实例的特性,可以用来实现工具类。将类定义为抽象,提供静态方法以供访问。

abstract关键字和哪些关键字冲突?

private:私有则不能继承,那么就不能被重写

final:定义为final则不能被继承和重写

static:无意义,抽象方法无方法体

接口是什么?

在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

接口的特点:

1.除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

2.接口可以多实现

3.成员变量默认是静态的(public static final)类型,且无需显式定义

4.无构造方法,它的子类使用super调用的是Object类的构造方法

5.成员方法只能是抽象方法,修饰符默认且必须是是(public abstract)类型,abstract关键字可以省略

注意:当多态创建父接口时,对象只能调用子类实现的父接口方法。这句话怎么理解呢?看下面的代码:

Son implements Father,Mother{

    ...

}

Father f = new Son();

那么这里的f对象的引用只能调用Father接口中有的方法

总结:

抽象类和接口的区别:

语法层面

1.抽象类可以有构造方法,接口中不能有构造方法;

2.抽象类中可以有普通成员变量,接口中没有普通成员变量(默认public static final );

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的;

4.抽象类中的抽象方法的可以是public,protected的,但接口中的抽象方法只能是public的;

5.抽象类中可以包含静态方法,接口中不能包含静态方法

6.抽象类中可以包含任意访问权限的静态成员变量,但接口中定义的变量只能是public static final类型。

7.一个类可以实现多个接口,但只能继承一个抽象类。

思想层面:

抽象类与子类为”is a”关系,它抽象出事物的共同本质特征,可单一继承;

接口与实现类为”like a”关系,它定义并规范了个性化的功能特征,可多重继承(实现)。

抽象类和接口的相同之处:

抽象类和接口都不能被实例化,两种都是java实现抽象的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值