抽象类和接口

一、抽象类

由来

⽗类中的⽅法,被它的⼦类们重写,⼦类各⾃的实现都不尽相同。那么⽗类的⽅法声明和⽅法主体,只有声明还有意义,⽽⽅法主体则没有存在的意义了。我们把没有⽅法主体的⽅法称为抽象⽅法。Java语法规定,包含抽象⽅法的类就是抽象类。

定义

抽象⽅法:没有⽅法体的⽅法。
抽象类:包含抽象⽅法的类。

抽象⽅法
使⽤ abstract 关键字修饰⽅法,该⽅法就成了抽象⽅法,抽象⽅法只包含⼀个⽅法名,⽽没有⽅法体。

修饰符 abstract 返回值类型 ⽅法名 (参数列表);

抽象类
如果⼀个类包含抽象⽅法,那么该类必须是抽象类。
定义格式:

abstract class 类名字 {
}

抽象的使用

继承抽象类的⼦类必须重写⽗类所有的抽象⽅法。否则,该⼦类也必须声明为抽象类。最终,必须有⼦类实现该⽗类的抽象⽅法,否则,从最初的⽗类到最终的⼦类都不能创建对象,失去意义。

  1. 抽象类不能直接实例化对象,依靠多态;
  2. 抽象类有构造方法,供子类使用(构造方法的默认super());
  3. 抽象类不一定包含抽象方法,但包含抽象方法的类一定是抽象类;

理解:未包含抽象⽅法的抽象类,⽬的就是不想让调⽤者创建该类对象,通常⽤于某些特殊的
类结构设计。

二、接口

概述

接⼝,是Java语⾔中⼀种引⽤类型,是⽅法的集合,如果说类的内部封装了成员变量、构造⽅法和成员⽅法,那么接⼝的内部主要就是封装了⽅法,包含抽象⽅法(JDK 7及以前)默认⽅法和静态⽅法(JDK8)私有⽅法 (JDK 9)

接⼝的定义,它与定义类⽅式相似,但是使⽤ interface 关键字。它也会被编译成 .class ⽂件,但⼀定要明确它并不是类,⽽是另外⼀种引⽤数据类型。

定义格式

public interface 接⼝名称 {
 // 抽象⽅法
 // 默认⽅法
 // 静态⽅法
 // 私有⽅法
}
含有抽象方法:

抽象⽅法:使⽤ abstract 关键字修饰,可以省略,没有⽅法体。该⽅法供⼦类实现使⽤。

含有默认方法和静态方法:

默认⽅法:使⽤ default 修饰,不可省略,供⼦类调⽤或者⼦类重写。
静态⽅法:使⽤ static 修饰,供接⼝直接调⽤。

含有私有方法和私有静态方法

私有⽅法:使⽤ private 修饰,供接⼝中的默认⽅法或者静态⽅法调⽤。

基本的实现

类与接⼝的关系为实现关系,即类实现接⼝,该类可以称为接⼝的实现类,也可以称为接⼝的⼦类。实现的动作类似继承,格式相仿,只是关键字不同,实现使⽤ implements 关键字。

抽象方法的使用

必须全部实现。

默认方法的使用

可以继承,可以重写,⼆选⼀,但是只能通过实现类的对象来调⽤。

静态方法的使用

静态与 .class ⽂件相关,只能使⽤接⼝名调⽤,不可以通过实现类的类名或者实现类的对象调⽤。

私有方法的使用
  1. 私有⽅法:只有默认⽅法可以调⽤。
  2. 私有静态⽅法:默认⽅法和静态⽅法可以调⽤。
  3. 如果⼀个接⼝中有多个默认⽅法,并且⽅法中有重复的内容,那么可以抽取出来,封装到私有⽅法中,供默认⽅法去调⽤。从设计的⻆度讲,私有的⽅法是对默认⽅法和静态⽅法的辅助。

接口的多实现

接口可以多实现也可以多继承。

抽象方法: 必须重写所有抽象方法,如果抽象方法有重名,只需要重写一次。
默认方法:
接⼝中,有多个默认⽅法时,实现类都可继承使⽤。如果默认⽅法有重名的,必须重写⼀次。

优先级的问题:
当⼀个类,既继承⼀个⽗类,⼜实现若⼲个接⼝时,⽗类中的成员⽅法与接⼝中的默认⽅法重名,⼦类就近选择执⾏⽗类的成员⽅法。

注意事项

其他成员特点:

  1. 接⼝中,⽆法定义成员变量,但是可以定义常量,其值不可以改变,默. 认使⽤ public static final 修饰。
  2. 接⼝中,没有构造⽅法,不能创建对象。
  3. 接⼝中,没有静态代码块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值