java default 关键字_Java中容易被遗忘的default关键字

default关键字

default关键字在JDK8中有两个用处。

1. 在switch语句的时候使用default

int day = 8;

String dayString;

switch (day) {

case 1: dayString = "Monday";

break;

case 2: dayString = "Tuesday";

break;

case 3: dayString = "Wednesday";

break;

case 4: dayString = "Thursday";

break;

case 5: dayString = "Friday";

break;

case 6: dayString = "Saturday";

break;

//如果case没有匹配的值,那么肯定是星期日

default: dayString = "Sunday";

break;

}

System.out.println(dayString);

当case里的值与switch里的key没有匹配的时候,执行default里的方法。

2. 在定义接口的时候使用default来修饰具体的方法

interface IntefercaeDemo {

//具体方法

default void showDefault(){

System.out.println("this is showDefault method");

}

//具体方法

static void showStatic(){

System.out.println("this is showStatic method");

}

//没有实现的抽象方法

void sayHi();

}

class LearnDefault implements IntefercaeDemo{

//实现抽象方法

@Override

public void sayHi() {

System.out.println("this is sayHi mehtod");

}

public static void main(String[] args) {

//接口中被static所修饰的具体方法

IntefercaeDemo.showStatic();

//将实现了IntefercaeDemo的类实例化

LearnDefault learnDefault = new LearnDefault();

//被Default所修饰的具体方法可以通过引用变量来调用

learnDefault.showDefault();

}

}

JDK8中为了加强接口的能力,使得接口可以存在具体的方法,前提是方法需要被default或static关键字所修饰。这样做的好处是接口的每个实现类如果都想要相同的功能,就不需要重复代码,而是在接口进行定义即可。默认方法在子类也可以被重写。

另外子类重写的时候,记得synchronized标记的父类函数,子类重写也必须要带synchronized关键字。更多有关synchronized的知识,点击查看

FAQ

如果一个类实现了两个接口,这两个接口又同时都包含了一个名字相同的default方法,那么会发生什么情况?

在这样的情况下,编译器是会报错,得到一个编译器错误,因为编译器不知道应该在两个同名的default方法中选择哪一个,因此产生了二义性。

default作为访问限制符

在成员函数定义时,没有加访问限制符的函数,其访问等级为default

public class Demo{

// 没有访问修饰符修饰,访问限制等级为default

String name;

void show(){}

}

来回顾下Java中访问限制符的对比:

25443

Java中访问限制符的对比

25443

哎呀,如果我的名片丢了。微信搜索“全菜工程师小辉”,依然可以找到我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值