Java_接口

抽象类

父类方法的不确定性
当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。

  • 用abstract关键字来修饰一个类时,这个类就叫抽象类。
  • 用abstract关键字来修饰一个方法时,这个方法就是抽象方法。
  • 抽象类的价值更多作用在于设计,是设计者设计好后,让子类继承并实现抽象类()。
  • 抽象类不能被实例化
  • 抽象类不一定要包含abstract方法。也就是说,抽象类可以没有abstract方法。
  • 一旦类包含了abstract方法,这个类必须声明为abstract。
  • abstract只能修饰类和方法,不能修饰属性和其他的。
  • 抽象类可以有任意成员。比如:非抽象方法、构造器、静态属性等。
  • 抽象方法不能有主体,即不能实现。
  • 如果一个类继承了抽象类,则它必须实现抽象类中的所有抽象方法,除非他自己也声明为abstract类。
  • 抽象方法不能使用private、final和static来修饰,因为这些关键字都是和重写相违背的。

概念

接口是一个特殊的“抽象类”,接口里不能包含普通方法,接口中的所有方法都是抽象方法。(JDK7.0前)
接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来。
=小结=
Jdk7.0之前,接口中的所有方法都是抽象方法,不能有方法体。
Jdk8.0后接口可以有静态方法,默认方法,也就是说接口中可以有具体方法的实现。

接口的定义

和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。接口定义的的基本语法如下:

[修饰符] interface 接口名 extends 父接口1,父接口2...
{
	零个到多个常量定义...
	零个到多个抽象方法定义...
	零个到多个内部类、接口、枚举定义...
	零个到多个默认方法或类方法定义...
}

修饰符可以是public或者省略,如果省略了public访问控制符,则默认采用包权限访问控制符。
接口名应与类名采用相同的命名规则。
一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。‘

接口定义的是一种规范,因此接口里不能包含构造器和初始化块定义。接口里可以包含成员变量(只能是静态常量)、方法(只能是抽象实例方法、类方法或默认方法)、内部类(包括内部接口、枚举)定义。
接口可被当作是一个特殊的类,因此一个Java源文件里最多只能有一个public接口,如果一个Java源文件里定义了一个public接口,则该源文件的主文件名必须与该接口名相同。

接口的继承

接口的继承和类继承不一样接口完全支持多继承,即一个接口可以有多个直接父接口。
和类继承相似子接口扩展某个父接口,将会获得父接口里定义的所有抽象方法、常量。

使用接口

  1. 接口不能用于创建实例,但接口可以用于声明引用类型变量。当使用接口来声明引用类型变量时,这个引用类型变量必须引用到其实现类的对象。

  2. 接口中所有方法都是public修饰

  3. 一个普通类实现接口,就必须把接口类中的抽象方法都实现。

  4. 抽象类实现接口,可以不用实现接口中的方法。

  5. 一个类同时可以实现多个接口。

  6. 接口中的属性,只能是final的,而且是public static final修饰符。

  7. 接口中的属性访问形式:接口名.属性名

  8. 一个接口不能继承其他的类, 但是可以继承多个别的接口。

  9. 接口的修饰符,之恩那个是public和默认,这点和类的修饰符一样。
    10.当子类继承了父类,就自动的拥有父类的功能。
    如果子类需要扩展功能,可以通过实现接口的方式去扩展。
    接口的主要用途:

  10. 定义变量,也可用于进行强制类型转换。

  11. 调用接口中定义的常量。

  12. 被其它类实现。

一个类可以实现一个或多个接口,继承使用extends关键字,实现则使用implements关键字。类实现接口语法格式如下:

[修饰符] class 类名 extends 父类 implements 接口1,接口2...
{
	类体部分
}

一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里所定义的全部抽象方法,该类也必须定义成抽象类。
一个类实现某个接口时,该类将会获得接口中定义的常量(成员常量)、方法等。
实现接口方法时,必须使用public访问控制修饰符,因为接口中的方法都是public的,而子类(相当于实现类)重写父类方法时访问权限只能更大或者相等。

接口的多态参数

  1. 多态参数,接口引用可以指向实现了接口的类的对象。
  2. 多态数组,
  3. 接口存在多态传递现象。

实现接口VS继承类

接口和继承解决的问题不同
继承的价值在于:解决代码的复用性和可维护性。
接口的价值在于:设计、设计好各种规范(方法),让其它类去实现这些方法。
接口比继承更加灵活
继承是满足is - a 的关系,接口是满足like - a的关系。
接口在一定程度上实现代码解耦。【即接口的规范性+动态绑定机制】

接口和抽象类

相同点:

  1. 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其它类实现和继承。

  2. 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
    不同点

  3. 接口里只能包含抽象方法、静态方法、默认方法,不能为普通方法提供方法实现;抽象类则完全可以包含普通方法。

  4. 接口中只能定义静态常量,不能定义普通成员变量;抽象类里则既可以定义普通成员变量,也可以定义静态常量。

  5. 接口中不包括构造器;抽象类中可以包含构造器,抽象类中的构造不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。

  6. 接口中不能包含初始化块,但抽象类中完全可以包含初始化块。

  7. 一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java中单继承的不足。

面向接口编程

接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极好的降低程序各模块之间的耦合,从而提高系统的可扩展性和可维护性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值