抽象类、接口、接口中的方法、函数式接口

一、抽象类

◆abstract可以修饰类和方法:修饰的类叫抽象类;修饰的方法叫抽象方法(抽象方法只有声明部分,而没有具体的方法体)

◆一个abstract修饰的抽象类只关心它的子类是否具有某种功能,并不关心自身功能的具体行为,功能的具体行为由子类负责实现

◆抽象类不能直接被实例化,即不能使用new来创建该抽象类的对象

◆抽象类中的抽象方法是是堕胎的一种表现形式

◆抽象类的子类必须实现父类中的所有抽象方法,否则子类也为抽象类

◆抽象类中可以没有抽象方法,但当一个类中有了抽象方法,该类一定为抽象类

 

抽象类与普通类的区别:

◆ 抽象类前面必须有abstract修饰,而普通类没有

◆抽象类不能创建对象,普通类可以

◆抽象类中可以有抽象方法,普通类中一定没有

 

二、接口

◆java接口是抽象方法的集合,定义语法为:

        访问权限控制符 interface 接口名 [extends 接口列表]{     //访问权限控制符只能是public和友好的

                    常量;

                    抽象方法;

                    内部类;

}

注:接口只能包含常量(由public static final)、抽象方法及内部类

        接口中的抽象方法必须为public访问权限控制符,不能为其他

        接口名的命名规则和类名的命名规则相同

        

◆可使用extends关键字实现接口继承,但需注意:1、接口只能继承父接口,不能继承抽象类和普通类

                                                                             2、接口弥补了java单一继承的缺点(java类只能继承一个父类),

                                                                                即接口可 以继承多个父类接口,父类接口之间用“,”隔开。

 

◆接口实现

1、类通过implements关键字实现接口,Java中的类只能是单继承,但可以实现多个接口弥补Java类单继承的不足,语法如下:

访问权限控制符   修饰符 class 类名 implements 接口1,接口2

(注:在类中实现接口时,实现类中的名字,返回值类型、参数的个数及参数数据类型必须与接口中对应的抽象方法一致)

2、当一个类实现了一个接口却没有实现接口中的所有抽象方法,则该类一定是abstract类;若多个接口中定义相同的抽象方法,则在实现类中实现一个即可

 

抽象类与接口区别:

 

抽象类

接口

关键字

abstract

Interface

成员变量

可包含任意合法成员变量(包括各种访问级别的类成员变量和实例成员变量)

只能包含公开静 态常量(默认public static final修饰)

构造方法

有构造方法

无构造方法

方法

可包含任意合法方法(包括各种访问级别的非抽象类方法和非抽象实例方法,也包含除private外的非静态抽象方法

JDK7及其以下版本JDK只能包含公开且抽象的方法(默认public abstract修饰),而JDK8开始可以包含default修饰的非抽象方法。

如何实现抽象方法

通过自定义类继承抽象类的方式实现抽象类的抽象方法

通过自定义类implements接口实现接口中的抽象方法,定义类可以implements多个接口

是否存在多继承

一个抽象类只能继承一个抽象或非抽象类

一个接口可以继承多个接口

◆接口回调

接口回调描述的是一种现象:接口声明的变量只想起实现类实例化的对象,那么该接口变量就可以调用接口中的抽象方法;接口没有构造方法,不能创建自己的对象,但可以引用实现类的对象,如图:

 

◆接口实现类

1、接口实现类可以直接使用接口中的常量(直接在实现类中使用常量名)

2、接口实现类所实现的多个接口中有常量名相同的常量,则在实现类中不能直接使用,必须用类名来确定调用的为那个接口中的常量

 

 

三、默认方法

Java8之前,接口中定义的方法只能是抽象方法,自Java8开始,接口还可以添加以一个或多个有default关键字修饰的非抽象方法,又称为扩展方法,该默认方法由接口实现类创建的对象来调用;添加一个或多个有default关键字修饰的非抽象方法,该方法由接口或其实现类直接调用

 

四、函数式接口

如果接口种只定义一个抽象方法,则该接口为函数式接口,可以用 @FunctioalIterface  注解来验证;函数式接口中可以定义多个常量、默认方法和静态方法,但只能定义一个抽象方法和多个Java。lang.object中的public方法

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值