JavaSE学习历程
第一章:Java初识
第二章:Java语言基础
第三章:选择结构与分支结构
第四章:循环结构
第五章:方法/函数
第六章:数组
第七章:面向对象
第八章:三大特性
第九章:三个修饰符
第十章:接口
1 接口语法
接口相当于特殊的抽象类,定义方法,组成部分与抽象类类似.
使用interface关键字定义接口
没有构造方法,不能创建对象
只能定义:公开静态常量,公开抽象方法
interface Printer{
public static final String SEX_MAN = "男";
public abstract void inbox();
}
2 微观接口
接口微观概念:接口是一种能力和约定.
- 接口的定义:代表了某种能力.
- 方法的定义:能力的具体要求
经验:Java单继承,当父类的方法种类无法满足子类需求时,可实现接口扩充子类的能力
接口支持多实现,可为类扩充多种能力
3 接口与类的异同
相同点:
- 可编译成字节码文件
- 不能创建对象
- 可以作为引用类型
- 具备Object类中所定义的方法
不同点:
- 所有的属性都是公开的静态常量,隐式使用public static final修饰.
- 所有的方法都是公开的抽象方法,隐式使用public abstract修饰
- 没有构造方法,动态代码块,静态代码块
4 接口的规范
任何类在实现接口时,必须实现接口中所有的抽象方法,否则此类为抽象类
实现接口中的抽象方法时,访问修饰符必须时public.
5 接口的应用
5.1 接口的引用
- 同父类一样,接口也可以声明为引用,并指向实现类对象.
- 接口引用,仅可调用接口中所声明的方法,不可调用实现类中的独有的方法
- 可强制转换回实现类本身类型,进行独有方法调用
5.2 接口的多态
接口引用指向实现类对象
不同引用类型,仅可调用自身类型所声明的方法
5.3 类与接口的常见关系
类:单继承
类与接口:多实现
接口与接口:多继承
5.4 案例
实现防盗门:创建抽象类Door、接口Lock 定义上锁方法、接口Bell定义门铃方法,创建类AntiThiefDoor,继承及实现接口
public class TestDoor {
public static void main(String[] args) {
Door door = new AntiThiefDoor();
door.open();
Bell door1 = new AntiThiefDoor();
door1.bell();
Lock door2 = new AntiThiefDoor();
door2.lock();
AntiThiefDoor door3 = new AntiThiefDoor();
door3.open();
door3.bell();
door3.lock();
}
}
abstract class Door{
public abstract void open();
}
//继承抽象类,实现接口
class AntiThiefDoor extends Door implements Lock,Bell{
@Override
public void open() {
System.out.println("开门");
}
@Override
public void lock() {
System.out.println("上锁");
}
@Override
public void bell() {
System.out.println("响铃");
}
}
interface Lock{
public abstract void lock();
}
interface Bell{
public abstract void bell();
}
6 常量接口
- 将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中统一管理.提高代码可读性.
7 宏观接口
7.1 宏观接口
宏观概念:接口是一种标准.
7.2 接口回调
接口回调:先有接口的使用者,后有接口的实现者.
接口版哥德巴赫猜想
public class TestGoldbach {
public static void main(String[] args) {
//调用哥德巴赫猜想方法,验证;因为调用,所以写了实现类--->第四步
checkGoldbach(9,new InterfaceImplementClass());
}
//验证哥德巴赫猜想-->第二步;
//因方法被调用--->导致回调接口--->第五步,接口回调完成
//接口回调:需要传递实例对象,背后实质传递的是实现类对象的实例方法,实例方法的背后实质传递的是方法的逻辑代码(我们真正需要的).
public static void checkGoldbach(int num,MathTool tool){
for (int i = 2; i < num/2; i++) {
if(tool.isPrime(i)&&tool.isPrime(num-i)){
System.out.println(i+"\t"+(num-i));
}
}
}
}
// 接口,约定--->建立标准;第一步
interface MathTool{
//判断质数
public abstract boolean isPrime(int num);
}
//接口实现类--->第三步
class InterfaceImplementClass implements MathTool{
@Override
public boolean isPrime(int num) {
for (int i = 2; i < num; i++) {
//利用取模判断是否为质数
if (num%i==0){
return false;
}
}
return true;
}
}
7.3 接口好处
- 程序的耦合度降低。
- 更自然的使用多态。
- 设计与实现完全分离。
- 更容易搭建程序框架。
- 更容易更换具体实现。
8 接口设计原则
接口隔离原则:
- 一个接口中,尽可能实现一个功能