如果抽象类中所有的方法都是抽象方法,就把抽象类变成了接口用interface来表示。类与接口之间通过implements来表示实现,
如果一个普通类实现接口就要把接口中所有的抽象方法进行重写,如果不想都重写就要把普通类编程抽象类。接口与接口之间允许多继承
接口中都是抽象方法?不一定 如果jdk1.8以前接口中只能有抽象方法,从jdk1.8开始就允许接口中可以去定义实体类
接口能定义构造方法?接口中没有构造方法,就无法创建对象
任何类型的对象传值给接口,编译都不检测,运行是检测类与接口之间是否是实现关系
接口与接口之间多继承,类与接口是多实现?可以
接口中允许定义属性和方法?
Illegal modifier for the interface field Shape.i; only public, static & final are permitted//属性
Illegal modifier for the interface method ma; only public, abstract, default, static and strictfp are permitted//抽象方法(默认被static&public共同修饰)
package cn.itcast.day11;
/*
* 接口---interface---不再是类了
* */
public class InterfaceDemo2 {
public static void main(String[] args) {
// Lamda表达式:使用前提是接口中有且仅有一个抽象方法
//(参数列表)->{重写的方法体}
// Calc c= (x,y)->{return x>y?x:y;};
// Calc c=(int x,int y)->x>y?x:y;
// 如果方法体只有一句话就可以省略{}以及return
// 由前面抽象方法的参数类型可以推到最后面需要的类型
Calc c=(x,y)->x>y?x:y;
System.out.println(c.getMax(6, 8));
}
}
//计算器
//函数式接口---只有一个抽象方法--函数式编程
@FunctionalInterface
interface Calc{
//求和
//实体方法--默认方法
public default int getSum(int m,int n) {
return n+m;
}
//求积
//静态方法---实体方法
public static int getJi(int m,int n) {
return n*m;
}
//抽象方法
int getMax(int m,int n);
}
JDK1.8在接口中的新特性
允许定义实体方法–通过static或者default修饰完成的
Lambda表达式—用于重写(接口)抽象方法,规定接口中只能有一个抽象方法,
这个接口就叫做函数表达式接口----函数式编程
import java.util.Arrays;
/*
* 接口---interface---不再是类了
* */
public class InterfaceDemo3 {
public static void main(String[] args) {
int [] arr={2,5,416,415,8,2,6,1};
// Array a=(int []arr)->{ Arrays.sort(arr);};
// Array a=(int []arr)-> Arrays.sort(arr);
// Array a=(arr)->Arrays.sort(arr);
// Array a=arr->Arrays.sort(arr);
// 从前到后都只是一个参数的数据参与操作
// ::---的静态方法
Array a=Arrays::sort;
a.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
interface Array{
void sort(int [] arr);
}
接口–模板、规范