java8 改进_Java 8中的改进的接口

Java 8 允许在接口中定义默认方法.默认方法必须使用 default 修饰,该方法不能使用 static 修饰,无论程序是否指定,默认方法总是使用 public 修饰.如果开发者没有指定 public ,系统会自动为默认方法添加 public 修饰符.由于默认方法并没有 static 修饰,因此不能直接使用接口来调用默认方法,需要使用接口的实现类的实例来调用这些默认方法.

Java 8 允许在接口中定义类方法,类方法必须使用 static 修饰,该方法不能使用 default 修饰,无论程序是否指定,类方法总是使用 public 修饰.如果开发者没有指定 public ,系统会自动为类方法添加 public 修饰符.类方法可以直接使用接口来调用.

接口定义实例

public interface Output {

int MAX_CACHE_LINE = 50;

void out();

void getData(String msg);

// 在接口中定义默认方法

default void print(String... msg) {

Arrays.asList(msg).forEach(m -> System.out.println(m));

}

default void print_v2(String... msg) {

for (String m : msg) {

System.out.println(m);

}

}

// 在接口中定义静态方法

static String staticTest() {

return "接口里的静态方法";

}

static String staticTest_v2() {

return "接口里的静态方法_v2";

}

}

public class OutputImpl implements Output {

@Override

public void out() {

System.out.println("out invoke");

}

@Override

public void getData(String msg) {

System.out.println("getData invoke");

}

}

使用实例

Output output = new OutputImpl();

// 常规接口方法调用

output.out();

output.getData("hello");

// default方法调用

output.print("hello", "indian mi fan", "are you ok?");

output.print_v2("thank", "you");

// static方法调用

System.out.println(Output.staticTest());

System.out.println(Output.staticTest_v2());

// 不能通过接口的实现类直接调用接口的static方法OutputImpl.staticTest();

总结

接口的 default(默认) 方法可以提供方法实现体

接口的实现类可以不实现 default(默认) 方法

接口的实现类可以实现 default(默认) 方法

接口的实现类的实例可以直接使用 default(默认) 方法

接口的 static(静态) 方法只能被接口直接调用.不能被接口的实现类调用

接口的 default(默认) 方法与 static(静态) 方法都可以定义多个

接口的 default 方法与 static 方法都不可以使用 final 进行修饰

static 方法不能使用 final 修饰这个很容易理解, staitc 方法是属于接口的方法,不会被实现类重写.

default 方法不能被 final 修饰,个人的理解是 default 方法本质上是一个"有实现体"的接口抽象方法,为所有实现类提供一个默认的实现,而这个 default 方法和其他抽象方法一样,被设计出来就希望是被实现类进行重写的.

假设 default 方法可以被 final 修饰,则这个方法就不能被接口的所有实现类重写,也就是说这个方法只能有一种实现,那不就和 static 方法一样了吗?那直接将这个方法设计为 static 方法就好了.

注:重写( override )是在继承与多态的概念下才有的.

而 static 修饰的对象则属于类本身,与继承多态并无关联.

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值