接口的组成和方法引用

接口的组成

常量:默认是 public static final
方法:默认是 public abstract
jdk8中,增加了默认方法(public default),静态方法(public static)
jdk9中,增加了私有方法

public interface eatable {
    void funAbstract();//抽象方法,实现类必须进行实现
	//默认方法和静态方法都需要方法体
	//默认方法:不强制实现类必须重写, 实现类可以直接使用
	//主要用于接口的升级,而不破坏现有的代码
    default void funDefault(){System.out.println("默认方法");}
	//接口中的静态方法只能被接口调用
    static void funStatic(){System.out.println("静态方法");}
}
// 实现抽象方法并调用默认方法
((eatable) () -> System.out.println("实现抽象方法")).funDefault();
// 实现抽象方法并调用抽象方法
((eatable) () -> System.out.println("实现抽象方法")).funAbstract();
// 接口中的静态方法只能被接口调用,不能被实现类调用
eatable.funStatic();//OK
((eatable) () -> System.out.println("实现抽象方法")).funStatic();//Error

方法引用

使用已有的方法逻辑去处理接口中的那个抽象方法
引用类中的静态方法

// 抽象方法的参数全部传递给被引用的静态方法
((eatable) s -> Integer.parseInt(s)).toInt("2349645");//lambda形式
((eatable) Integer::parseInt).toInt("23");//类名::静态方法
interface eatable {void toInt(String s);}

引用类中的非静态方法

// 抽象方法的参数 全部传递给 被引用的非静态方法
((eatable)s -> System.out.println(s.toUpperCase())).toUpper("fdf");
((eatable)new linshi()::printString).toUpper("fsdf");//借助对象,引用类中的非静态方法         
class linshi {
    public void printString(String s){System.out.println(s.toUpperCase());}
}
interface eatable {void toUpper(String s);}

也可以这样:
但注意:接口中的那个抽象方法 第一个参数的参数类型 得是 linshi,后面的参数传给了 printString 方法。

((eatable)(s,a) -> System.out.println(a.toUpperCase())).toUpper(new linshi(),"fgwerg");
//使用这种 类名::非静态方法 形式的时候
//接口中的那个抽象方法第一个参数的参数类型得是linshi
//之后的参数都传给printString方法
((eatable)linshi::printString).toUpper(new linshi(),"grg");
class linshi {public void printString(String s){System.out.println(s.toUpperCase());}}
//第一个参数作为调用者
//第二个参数给到printString方法去作为参数
interface eatable {void toUpper(linshi a,String s);}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值