接口【学习笔记】

一个事物可能具有多方面特征

每一种特征是特殊能力的体现

1.接口(Interface)含义概念

 1)含义和功能

在JAVA语言中,接口是对符合接口需求的类的一套规范。接口的目的是用来实现某个类满足一个或多个类型关系的,同时去除了多重继承的“二义性问题”

2)接口概念

所谓接口,实质上就是对外部提供功能的声明(而不揭示这些运算的结构)

从编程的角度看,JAVA语言定义的接口实际上是一组抽象方法和常量的集合,为其他类提供运算的外部说明

---------------------------------------------------------------------------------------------------------------------------------

2.接口的声明和定义

 Java中声明接口的语法如下:

[public]  interface  接口名  [extends  父接口名列表]
{   //接口体;
    //常量域声明
[public] [static] [final] 域类型 域名=常量值;
  //抽象方法声明
[public] [abstract][native]返回值 方法名(参数列表) [throw异常列表];
}

从上面的语法规定可以看出,定义接口与定义类非常相似,实际上完全可以把接口理解成为一种特殊的类,接口是由常量和抽象方法组成的特殊类(也无法实例化)

---------------------------------------------------------------------------------------------------------------------------------

3.接口成员特点

在接口中的定义:

1)接口中的属性都是用static final修饰的常量 (隐含特性),可以省略这两个关键词,和不省略一样

2接口中的方法都是用abstract修饰的抽象方法,且都是public的(隐含特性),可以省略这两个关键词,和不省略一样在接口中只能给出这些抽象方法的方法名、返回值和参数列表,而不能定义方法体

这种情况可理解为给使用者规定了一组信息交换、传输和处理的“接口”。

接口的实现:

一个类要实现某个或某几个接口时1,有如下的步骤和注意事项:

1)在类的声明部分,用implements关键字声明该类将要实现哪些接口

2)如果实现某些接口的类(实现类)不是abstract的抽象类,则在类的定义部分必须实现指定接口的所有抽象方法;如果实现类是abstract类,则可以根据需要决定是否实现某个抽象方法(不实现的话,则依赖于其子类去实现)

3)一个类在实现某接口的抽象方法时,必须使用基本相同的方法头,即方法名和参数完全一样,而范围符实现类要大于或等于抽象方法的范围。如:抽象

4)接口的抽象方法,其访问限制符都已指定是public所以类在实现方法时,必须显式地使用public修饰符 

---------------------------------------------------------------------------------------------------------------------------------

4.接口和接口的继承(仅作了解)

A.当某方面特性可以继承其他方面特性时,从父类接口可以拓展新的子接口;(注意接口关系中extends关键词后课跟多个接口,接口间可以多继承)

B.用多接口实现类产生一个对象,这个对象就具有多态性;

Person p=new Person();

//那么这个类就可以认为是一个地球人,能说话的生物,能走路的生物三个角色(即多态);

C.可以通过接口类进行变量类型的声明而产生某个实现类对象;这个时候动态绑定机制同样适用

Walkable p=new Person();
Walkable mp=new MarPerson();

 D.在不同角色(即态)之间转换,可以通过强制类型转换

(Talkable)p;  //此时可以访问相关接口方法
(Talkable)mp;

小结: 在类实现了多个接口情况下当通过某一接口声明变量,引用的对象会被认为是当前接口角色,能够访问相应接口类定义的方法;但无法访问到另一个接口的方法

---------------------------------------------------------------------------------------------------------------------------------

5.Object类所体现的多态

1. Object类(见部的相关内容)是所有类的根类,所以任何类的对象都可以有Object的态。

2. 那么Upcast的申明方式中,也可如下:

Object p = new Person();
Object mp = new MarPerson();

由于PersonMarPerson中都定义有toString方法,所有通过引用变量输出并调用toString方法时,可以动态绑定。

同理:如果有个showMessageObject obj),并送入某个类型的对象,都可以正常的调用,并执行相关的toString()方法。

但是对于talkwalk方法,则需要转成对应子态方能执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值