1、接口组成更新
接口的组成:
- 常量:public static final
- 抽象方法: public abstract (可省略)
- 默认方法(Java8之后)
- 静态方法(Java8之后)
- 私有方法(Java9之后)
打开IDEA按下ctrl+n 搜索List发现List是一个接口 包括了,默认方法(Java8之后)静态方法(Java8之后)私有方法(Java9之后)
1.2、接口中默认方法(Java8之后)
格式:public default void 方法名(){
}
package com.itheima01;
/*
如果我们想在接口中添加一个方法,就必须在接口中写一个方法,而且接口的实现类都需要重写这个方法
这样的话操作就比较繁琐,所以Java8之后引入了默认方法default void 方法名()
*/
public class myInterfaceDemo {
public static void main(String[] args) {
// 利用多态的方式
myInterface my=new myInterfaceImplOne();
my.show1();
my.show2();
// 实现类中重写了接口的方法,那么测试类就返回实现类的内容,否则返回接口中的方法体
my.show3();
}
}
1.3、接口中静态方法(Java8之后)
格式:public static void 方法名(){
}
静态方法: 只能通过接口名调用,不能通过实现类名或者对象名调用,还怕语义不明确
package com.itheima02;
//静态方法
// 只能通过接口名调用,不能通过实现类名或者对象名调用,还怕语义不明确
public class InterDemo {
public static void main(String[] args) {
// 利用多态实现接口
Inter i=new InterImpl();
i.show();
i.method();
// i.test(); 报错
// 可以通过接口去访问接口中的静态方法
Inter.test();
// InterImpl.teat();
Flyable.test();
}
}
1.4、接口中私有方法(Java9之后)
普通格式:private void 方法名(){
}
静态格式:private static void 方法名(){
}
默方法可以调用私有的静态方法和非静态方法
静态方法只能调用私有的静态方法
package com.itheima03;
public interface Inter {
// 默方法可以调用私有的静态方法和非静态方法
private void show(){
System.out.println("初级工程师");
System.out.println("中级工程师");
System.out.println("高级工程师");
//静态方法只能调用私有的静态方法
}
private static void method() {
System.out.println("初级工程师");
System.out.println("中级工程师");
System.out.println("高级工程师");
}
default void show1(){
System.out.println("show1开始执行");
/*System.out.println("初级工程师");
System.out.println("中级工程师");
System.out.println("高级工程师");*/
// show();
method();
System.out.println("show1结束执行");
}
default void show2(){
System.out.println("show2开始执行");
/*System.out.println("初级工程师");
System.out.println("中级工程师");
System.out.println("高级工程师");*/
// show();
method();
System.out.println("show2结束执行");
}
static void method1(){
System.out.println("method1开始执行");
/* System.out.println("初级工程师");
System.out.println("中级工程师");
System.out.println("高级工程师");*/
method();
System.out.println("method1结束执行");
}
static void method2(){
System.out.println("method2开始执行");
/*System.out.println("初级工程师");
System.out.println("中级工程师");
System.out.println("高级工程师");*/
method();
System.out.println("method2结束执行");
}
}
1.6、引用类的实例方法
引用类的实例方法,其实就是引用类中的成员方法
格式:类名::substring
范例:String::substring
String类中的方法:public String substring(int beginIndex,int endIndex)
从beginIndex开始到endIndex结束,截取字符串。返回一个字符串。子串的长度为endIndex-beginIndex
练习
package com.itheima07;
public class MyStringDemo {
public static void main(String[] args) {
useMyString((String s,int x,int y)-> {
return s.substring(x,y);
/* int x1 = x;
return x1;*/
});
// System.out.println((x+y));
// Lambda表达式改进
useMyString((s,x,y)->s.substring(x,y));
// 引用类的实例方法
useMyString(String::substring);
// Lambda表达式被类的实例方法替代时
// 第一个参数作为调用者
// 后面的参数全部传递给该方法作为参数
}
private static void useMyString(MyString my){
String s=my.mySubString("helloworld",2,5);
System.out.println(s);
}
}
1.7、引用构造器
引用构造器,其实就是引用构造方法
格式:类名::new
范例:Student::new
练习: