方法引用-通过super引用父类得成员方法
Calcable
package com.atguigu;
@FunctionalInterface
public interface Calcable {
public abstract void greet();
}
Human
package com.atguigu;
public class Human {
public void sayHello(){
System.out.println("这是父类方法");
}
}
Man
package com.atguigu;
public class Man extends Human{
@Override
public void sayHello() {
System.out.println("这是子类方法");
}
public void method(Calcable c){
c.greet();
}
public void show(){
method(super::sayHello);//方法引用
}
public static void main(String[] args) {
new Man().show();
}
}
方法引用-通过this引用本类得成员方法
Richable
package com.ithuima;
@FunctionalInterface
public interface Richable {
public abstract void buy();
}
Husband
package com.ithuima;
public class Husband {
public void buyHouse(){
System.out.println("北京买房");
}
public void marr(Richable r){
r.buy();
}
public void soHappy(){
marr(this::buyHouse);
}
public static void main(String[] args) {
new Husband().soHappy();
}
}
方法引用-类的构造器(构造方法)引用
PersonBuilder
package com.atgu;
@FunctionalInterface
public interface PersonBuilder {
Person builderPerson(String name);
}
Demo01
package com.atgu;
public class Demo01 {
public static void printName(String name,PersonBuilder p){
Person person =p.builderPerson(name);
System.out.println(person.getName());
}
public static void main(String[] args) {
printName("哈",Person::new);//使用Person类得带参构造方法,通过传递姓名创建对象
}
}
方法引用-数组得构造器引用
ArrayBuilder
package com.ArrayMethod;
@FunctionalInterface
public interface ArrayBuilder {
int[] builderArray(int length);
}
Demo
package com.ArrayMethod;
import java.util.ArrayList;
public class Demo {
public static int[] createArray(int length, ArrayBuilder ab){
return ab.builderArray(length);
}
public static void main(String[] args) {
int[] arr2 =createArray(4,int[]::new);
System.out.println(arr2.length);
}
}
方法引用-通过类名引用静态成员方法
Calcable
package com.StaticMethod;
@FunctionalInterface
public interface Calcable {
int calsAbs(int number);
}
Demo
package com.StaticMethod;
public class Demo {
public static int method(int number,Calcable c){
return c.calsAbs(number);
}
public static void main(String[] args) {
int method = method(-10, Math::abs);
System.out.println(method);
}
}
方法引用-通过对象名引用成员方法
Printable
package com.ObjectMethod;
@FunctionalInterface
public interface Printable {
void print(String s);
}
MethodRerObject
package com.ObjectMethod;
public class MethodRerObject {
public void printUpperCaseString(String str){
System.out.println(str.toUpperCase());
}
}
Demo
package com.ObjectMethod;
public class Demo {
public static void printString(Printable p){
p.print("Hello");
}
public static void main(String[] args) {
MethodRerObject obj =new MethodRerObject();
printString(obj::printUpperCaseString);
}
}