一、接口的组成
- 常量:public static final
- 抽象方法:public abstract
- 默认方法
- 静态方法
- 私有方法
二、默认方法
接口中默认方法的定义格式:
- 格式:public default 返回值类型 方法名(参数列表){}
- 范例:public default void show3(){}
public interface MyInterface{
void show1();
void show2();
default void show3(){
System.out.println("show3");
}
}
接口中默认方法的注意事项:
- 默认方法不是抽象方法,所以不强制被重写,但是可以被重写,重写的时候去掉default关键字
- public可以省略,default不能省略
三、接口中静态方法
接口中静态方法的定义格式:
- 格式:public static 返回值类型 方法名(参数列表){}
- 范例:public static void show(){}
public static void test(){
System.out.println("Inter中静态方法执行了");
}
接口中静态方法注意事项:
- 静态方法只能通过接口名调用,不能通过实现类或者对象名调用
- public可以省略,static不能省略
四、接口中私有方法
接口中私有方法的定义格式:
- 格式1:private 返回值类型 方法名(参数列表){}
- 范例1:private void show(){}
- 格式2:private static 返回值类型 方法名(参数列表){}
- 范例2:private static void method(){}
接口中私有方法的注意事项:
- 默认方法可以调用私有的静态方法和非静态方法
- 静态方法只能调用私有的静态方法
五、方法引用
方法引用符:
- ::该符号为引用运算符,所在的表达式被称为方法引用
usePrintable(System.out::println);
Lambda表达式支持的方法引用:
- 引用类方法
- 引用对象的实例方法
- 引用类的实例方法
- 引用构造器
1.引用类方法
引用类的静态方法:
- 格式:类名::静态方法
- 范例:Integer::parseInt
- Integer类的方法:public static int parseInt(String s)将String转换为int类型数据
public interface Convert {
Integer convert(String s);
}
public class ConvertDemo {
public static void main(String[] args) {
useConverter((String s ) -> {
return Integer.parseInt(s);
});
useConverter(s -> Integer.parseInt(s));
//引用类方法
useConverter(Integer::parseInt);
}
public static void useConverter(Convert c){
Integer number = c.convert("333");
System.out.println(number);
}
}
2.引用对象的实例方法
引用对象的实例方法,其实就是引用类中的成员方法:
- 格式:对象::成员方法
- 范例:“HelloWorld”::toUpperCase
- String类中的方法:public String toUpperCase()将String所有字符转换为大写
public class StringToUpper {
public void stringToUpper(String s){
String result = s.toUpperCase();
System.out.println(result);
}
}
public interface Convert {
void stringToUpper(String s);
}
public class ConvertDemo {
public static void main(String[] args) {
StringToUpper s = new StringToUpper();
useConverter(s::stringToUpper);
}
public static void useConverter(Convert c){
c.stringToUpper("HelloWorld");
}
}
3.引用类的实例方法
引用类的实例方法,就是引用类中的成员方法
- 格式:类名::成员方法
- 范例:String::substring
- String类中的方法:public String substring(int beginIndex,int eendIndex),从beginIndex开始到endIndex结束,截取字符串,字串的长度为endIndex-beginIndex
public interface SubString {
String mySubString(String s,int x,int y);
}
public class ConvertDemo {
public static void main(String[] args) {
useConverter((String s,int x,int y) -> {
return s.substring(x,y);
});
useConverter((s,x,y) -> s.substring(x,y));
//引用类的实例方法
useConverter(String::substring);
}
public static void useConverter(SubString c){
String s = c.mySubString("HelloWorld", 2, 5);
System.out.println(s);
}
}
4.引用构造器
引用构造器,其实就是引用构造方法
- 格式:类名::new
- 范例:Student::new
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Dataset implements Serializable {
private static final long serialVersionUID = 42L;
/* 数据库名称
*/
private String databaseName;
/**
* 数据库的描述
*/
private Integer databaseId;
}
public interface DatasetBuilder {
Dataset build(String name,int age);
}
public class DatasetDemo {
public static void main(String[] args) {
useDatasetBuilder((String databaseName,int databaseId ) -> {
return new Dataset(databaseName,databaseId);
});
useDatasetBuilder((databaseName,databaseId) -> new Dataset(databaseName,databaseId));
//引用构造器
useDatasetBuilder(Dataset::new);
}
private static void useDatasetBuilder(DatasetBuilder db){
Dataset dw = db.build("dw", 1);
System.out.println(dw.getDatabaseName() + "," + dw.getDatabaseId());
}
}

241

被折叠的 条评论
为什么被折叠?



