package com.yang.Test.StaticMethodReference;
/**
* 通过类型引用静态成员方法
* 类已经存在,静态成员方法也已经存在
* 就可以通过类名直接引用静态成员方法
*/
public class StaticMethodReferenceStudy {
//定义一个方法,方法的参数传递要绝对值的整数,和函数式接口Calcable
public static int method(int number,Calcable c){
return c.calsAbs(number);
}
public static void main(String[] args) {
//调用method方法,传递计算绝对值的整数和Lambda表达式
int number1 = method(-10, number -> {
//对参数进行绝对值得计算并返回结果
return Math.abs(number);
});
System.out.println(number1);
/**
* 使用方法引用优化Lambda表达式
* Math类是存在得
* abs计算绝对值得静态方法也是存在得
* 所以我们可以直接通过类名引用静态方法得
*/
int number2 = method(-10,Math::abs);
System.out.println(number2);
}
}
package com.yang.Test.StaticMethodReference;
@FunctionalInterface
public interface Calcable {
//定义一个抽象方法,传递一个整数,对整数进行绝对值计算并返回
int calsAbs(int number);
}
通过super引用父类的成员方法
package com.yang.Test.StaticMethodReference;
import com.yang.Test.SuperMethodReference.Greetable;
//子类
public class Man extends Human{
@Override
public void sayHello() {
System.out.println("Hello 我是Man!");
}
//定义一个i额方法参数传递Greetable接口
public void methid(Greetable g){
g.greet();
}
public void show() {
// //调用method方法,方法得参数Greetable是一个函数式接口所以我们可以传递Lambda
// methid(() -> {
// Human human = new Human();
// human.sayHello();
// });
//因为有字符类关系,所以存在一个关键字super代表父类所以我们可以直接使用super调用父类得成员方法
methid(() -> super.sayHello());
}
public static void main(String[] args) {
Man man = new Man();
man.show();
}
}
package com.yang.Test.StaticMethodReference;
/**
* 定义父类
*/
public class Human {
public void sayHello() {
System.out.println("Hello 我是Human!");
}
}
package com.yang.Test.StaticMethodReference;
@FunctionalInterface
public interface Calcable {
//定义一个抽象方法,传递一个整数,对整数进行绝对值计算并返回
int calsAbs(int number);
}