接口
1、接口的定义
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做”Java接口”,后者叫做”接口”。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只有包含常量和方法的定义,而没有变量和方法的实现。
格式:interface 接口名称{ }
2、接口的成员修饰符是固定的。
成员常量:public static final
成员函数:public abstract
3、接口注意事项:
发现接口中的成员都是public,接口的出现将“多继承”通过另一种形式体现出来,即多实现。
当一个抽象类中全是抽象方法时,这时将该抽象类用另一种形式,就是接口interface。
定义接口使用的关键字不是class,而是interface。
接口中的成员全部是公共权限。
类与类之间是继承关系,而类与接口之间是实现关系,接口与接口之间是继承关系。
接口不可以实例化,只能由实现了接口的子类并覆盖了接口中的所有抽象方法之后,该子类才可以被实例化,否则该子类仍为抽象类。
一个类在继承另一个类的同时,还可以实现多个接口。
接口克服了单继承的局限性。
接口与接口之间是继承关系,而且接口可以实现多继承。
4、接口特点:
接口是对外暴露的规则,是程序功能的扩展,降低耦合性,可以用多实现。
5、接口的实现类:
与抽象类一样,接口要使用也必须通过子类,子类通过implements关键字实现接口 ,
一个类可以实现多个接口,在implements语句中用逗号隔开。
非抽象子类必须实现接口中定义的所有方法(抽象方法)。
实现格式:
6、接口的使用规则
接口中所有的方法都是public abstract。
在接口中声明方法时,不能使用static,final,synchronized,private,protected等修饰符。
一个接口可以继承另一个接口。
Java中不允许类的多继承,但是允许接口的多继承。
接口中可以有数据成员,这些成员默认都是public static final
7、接口的用途
用处:
(1)通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系.。
(2)通过接口指明多个类共同需要实现的方法、
(3)通过接口了解对象的交互界面,而无需了解对象所对应的类。
8.在实际开发中不同类型的多态的使用情况
接口多态(最多)
抽象类多态(比较多)
具体对象的创建(经常会使用)
代码示例
代码示例
教练和运动员案例
乒乓球运动员和篮球运动员。
乒乓球教练和篮球教练。
为了出国交流,跟乒乓球相关的人员都需要学习英语。
请用所学知识:
分析这个案例有哪些抽象类,有哪些接口,有哪些具体类。
自己提供一些属性,测试一下
Person类(抽象类)代码
Speaking接口
代码
Player类(抽象类) 代码
Coach类(抽象类) 代码
PingPangPlayer类 代码
PingPangCoach类 代码
BasketPlayer类 代码
BasketCoach类 代码
TestDemo类(测试类) 代码
形式参数的问题:
形式参数是基本类型,对实际参数没有影响(简单)
形式参数是引用类型:
类(普通类)
抽象类 (abstract)
1.形式参数为普通类
代码示例
2.形式参数为抽象类
代码示例
3.形式参数是接口
代码示例
返回值:
如果返回值为基本类型:用对应的基本类型数据去接收即可!
引用类型:
类(具体类):
需要的是该类的对象
抽象类
接口
1.返回值类型为普通类类型
代码示例
2.返回值类型为抽象类类型
代码示例
3.返回值类型为接口类型
代码示例
内部类
在B类内部定义A类,A类就属于B的内部类
内部类访问外部类的特点:
外部类如何访问内部类的成员?
通过创建内部类对象的方式间接访问
代码示例
内部类的分类:
1)成员内部类:在外部类的成员位置。
2)局部内部类:在外部类的局部位置。
代码示例
实际开发中,接口作为形式参数的问题
1)提供接口的子实现类
代码示例
成员内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类(非静态的内部类)的成员方法:
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象
代码示例
关于成员内部类的修饰符:
特点:
静态成员内部类访问外部类的数据,该数据必须被static修饰
对于静态成员内部类的访问格式:
外部类名.内部类名 对象名 = new 外部类名.内部类名() ; //把静态成员内部类看成是外部类的成员
代码示例
局部内部类可以访问外部类的成员包括私有
在外部类的局部位置去访问内部类的show(),需要在局部位置去创建内部类对象,通过内部类对象去访问show()。
代码示例
匿名内部类
前提是有类或者接口
这个类可以是具体类也可以是抽象类
匿名内部类的本质:
继承了该类,进行方法重写或者实现了该接口的子实现类,进行方法重写
代码示例
匿名内部类面试题:
按照要求,补齐代码
要求在控制台输出”HelloWorld”
代码示例