抽象类和接口

本文详细介绍了抽象类和接口在Java中的概念、语法、特点和使用情况。抽象类作为类的抽象,用于被继承,包含抽象方法,不能被实例化。接口则是一种规范,包含抽象方法和默认方法,类可以通过实现接口来遵循特定规范,一个类可以实现多个接口。两者的主要区别在于结构组成、权限、子类使用方式和子类限制。
摘要由CSDN通过智能技术生成

目录

一、抽象类

1、抽象类的概念

2、抽象类的语法

3、抽象类的特点

二、接口

1、接口的概念

2、接口的语法

3、接口的特点

4、接口的使用

5、接口的继承

三、抽象类和接口的区别


一、抽象类

1、抽象类的概念

我们知道,当一个子类重写了父类的方法后,经过向上转型,父类引用了子类的对象,再去调用这个方法时,调用的是子类的方法,和父类的方法无关,那么父类的这个方法就没有实现的必要了,那么我们就可以把它设计成一个抽象方法,包含抽象方法的类称为抽象类

2、抽象类的语法

在Java中,我们通过abstract关键字来创建一个抽象类,以及定义抽象方法。

 注意:抽象类也是类,它也可以有自己的普通变量、方法和构造方法。 

3、抽象类的特点

(1)抽象类不可以被实例化,但是可以被继承;

 (2)抽象类的存在就是为了被继承,所以抽象类中的抽象方法不能被privatestaticfinal修饰,否则无法被继承;

  

(3)抽象类中不一定要有抽象方法,但是有抽象方法的类一定是抽象类;

(4)如果抽象类中含有抽象方法,那么子类在继承时必须重写这些抽象方法,如果子类不重写父类的抽象方法,那么子类也必须被abstract修饰为抽象类;

重写父类抽象方法:

不重写父类抽象方法: 

(5)抽象类虽然不能被实例化,但是它可以有构造方法,供子类创建对象时,初始化父类成员。

二、接口

1、接口的概念

在生活中,接口就是值两个设备直接的连接方式,比如电源插座、USB接口等等。

在Java中,接口是一种引用数据类型,可以看成是多个类的公共规范。

2、接口的语法

定义接口需要借助interface关键字,定义方式与定义类的方式相似:

注意:

(1)接口的名称前一般要先写个大写字母I,以此来表示这是一个接口(不写也不会报错);

(2) 阿里编码规范中约定,接口中的方法和属性前不加任何修饰符,保持代码的简洁性。

3、接口的特点

(1)接口中的成员变量,默认都是被public static final修饰的;

(2)接口中的方法,默认都是被public abstract修饰的抽象方法; 

(3)接口中的普通成员方法,一般是不能有具体的实现内容的;

(4)接口中的普通成员方法如果要有具体的实现,必须要被default修饰(从JDK8开始才有的);

(5)接口中可以有静态成员方法,它和default修饰的默认方法一样,都是被public修饰的;

(6)和抽象类一样,接口也是不能被实例化的;

(7)接口中不能有静态代码块、实例代码块以及构造方法;

(8)当一个类通过implements实现一个接口后,必须要重写接口中的抽象方法,否则这个类就要被abstract修饰为抽象类;

(9)一个接口引用可以引用一个实现它的类的对象,即向上转型;

4、接口的使用

接口不能直接使用,必须要通过一个类来“实现”接口,并重写接口中所有的抽象方法。

注意:子类和父类的关系是继承(extends),类和接口的关系是实现(implements)。

一个类可以在继承一个父类之后再实现接口:

我们知道,一个类只能继承一个父类,但是一个类可以实现多个接口

然后我们就可以通过函数传参的方式实现向上转换:

5、接口的继承

在Java中,类和类之间是单继承的,但是接口与接口之间可以是多继承的。所以,我们可以通过接口来达到类的多继承的目的。

上述代码中,ISwimming接口继承了IRunning和IFlying接口,那么ISwmimming接口中也就继承了它们的抽象方法,所以当Pig类实现了ISwimming接口后,就需要重写该接口里的每一个抽象方法。

三、抽象类和接口的区别

1、结构组成不同

抽象类:可以包含普通成员变量和普通成员方法、抽象方法、构造方法等(普通类有的它都有);

接口:包含public static final修饰的常量、抽象方法、静态方法、默认方法。

2、权限不同

抽象类:可以使用各种权限来修饰变量和方法;

接口:属性和方法默认都是public的。

3、子类使用方式不同

抽象类:子类通过extends关键字继承抽象类;

接口:子类通过implements关键字实现接口。

4、子类限制不同

抽象类:一个子类只能继承一个抽象类;

接口:一个子类可以实现多个接口。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃点橘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值