学习目标
- 掌握接口语法
- 理解接口多态
- 熟练使用接口
- 了解接口新特性
- 掌握final关键字
- 了解lambda语法
1.接口语法
1.1 接口概念
-
从功能上看, 实现接口就意味着扩展了某些功能
-
接口与类之间不必满足
is-a
的关系结构 -
从抽象上看, 接口是特殊的抽象父类
-
从规则上看, 接口定义者和实现者都必须遵守特定规则
1.2 面向接口编程
● 接口是设计层面的概念,往往由设计师设计,将定义与实现分离.
● 程序员实现接口,实现具体方法.
● 面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精髓之一
● 面向接口编程的意思是指在面向对象的系统中所有的类或者模块之间的交互是由接口完成的
1.3 接口语法
[访问权限修饰符] interface 接口名 {
公开静态常量列表;
公开抽象方法列表;
}
在开发中:
接口的命名方式只有2种
XXXDao/DAO.java XXXDaoImpl.java
xxxService.java xxxServiceImpl.java
1.4 接口组成部分
目前我们使用的是JDK11。
//jdk1.8+ 接口声明为函数式接口 使用标记注解 @FunctionalInterface
//@FunctionalInterface //有且只有1个抽象方法
public interface MyInterface {
//组成部分----> 都是public
//1.常量 public static final 默认 final修饰的变量都是常量
//接口作为常量类使用---->维护模块中很多不可变的数据
//1.1 常量名称全部大写
//1.2 必须赋值
//1.3 值不允许被更改
String NAME = "admin";
int USER_PASS = 1234;
//2.方法 接口比抽象类还要抽象 jdk1.8之前 接口里面的方法全部都是抽象方法 public abstract 默认
//2.1 抽象方法 对于程序猿来说 使用量最多还是仅仅抽象方法 (封装行为)
void demo1();
int max(int num1, int num2);
//2.1 功能方法---->有方法体的方法 jdk1.8+ public default
default void demo2() {
System.out.println("MyInterface。。。。。demo2.。。。。");
}
//2.3 静态方法 jdk1.8+
static String staticMethod() {
System.out.println("MyInterface。。。。。staticMethod.。。。。");
return "static";
}
//2.4 私有的静态方法 jdk1.9+ 服务于其它public static的方法
private static void privateStaticMethod() {
System.out.println("MyInterface。。。。。。privateStaticMethod。。。。");
}
//2.5 接口没有构造方法----->不能直接实例化 其实也可以 创建了 匿名内部类
}
1.5 使用接口
1 接口继承接口(extends)
接口与接口属于多继承关系。一个接口可以继承多个接口。使用extends关键字实现。
public interface AInterface extends BInterface,CInterface,....{
}
public interface AInterface {
void a();
}
interface CInterface {
void c();
}
interface BInterface extends AInterface, CInterface {
//子接口与父接口的关系
void b();
}
2 类实现接口(implements)
● 类与接口属于多实现关系。一个类实现多个接口。使用implements进行操作。
● 接口是比抽象类抽象层次更高的一个概念,因此和抽象类一样,它不能用于实例化对象,只能作为继承树的高层结构被子类实现(子类实现接口被称为implements(实现),其体现形式和继承类似)。
● 类实现接口,本质上与类继承类相似,区别在于“类最多只能继承一个类,即单继承,而一个类却可以同时实现多个接口”,多个接口用逗号隔开即可。实现类需要覆盖所有接口中的所有抽象方法,否则该类也必须声明为抽象类
public class 类名 extends Object implements AInter,BInter{
}
注意: 一个普通类实现接口有可能会报错?
public interface UserInterface {
//常量
String PASS = "1234";
String NAME = "admin";
//方法
boolean login(String name, String pass);
void register();
default void defaultMethod() {
System.out.println("UserInterface.....public....defaultMethod......");
}
static void staticMethod() {
System.out.println("UserInterface.....public....staticMethod......");
}
private void privateMethod() {
System.out.println("UserInterface.....private....privateMethod......");
}
}
//类实现接口称为接口的实现类
//接口就像 "招牌"
//只要类实现接口 就代表这个类中具有这些功能
//因此一个接口可以有多个实现类,有多套实现
public class UserInterfaceImpl implements UserInterface{
}
一个普通类 实现接口的时候 这个类可能会报错
解决方式:
1. 将这个类改为抽象类
2. 普通类重写/实现接口里面的所有的抽象方法
//类实现接口称为接口的实现类
//接口就像 "招牌"
//只要类实现接口 就代表这个类中具有这些功能
//因此一个接口可以有多个实现类,有多套实现
public class UserInterfaceImpl implements UserInterface{
@Override
public boolean login(String name, String pass) {
System.