美文网首页服务器后端开发JavaJava 杂谈
Java中容易被遗忘的default关键字

Java中容易被遗忘的default关键字

作者: 全菜工程师小辉 | 来源:发表于2019-07-09 19:45 被阅读0次

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中访问限制符的对比:

Java中访问限制符的对比 哎呀,如果我的名片丢了。微信搜索“全菜工程师小辉”,依然可以找到我

相关文章

  • Java中容易被遗忘的default关键字

    default关键字 default关键字在JDK8中有两个用处。 1. 在switch语句的时候使用defaul...

  • default关键字

    default是在java8中引入的关键字,被default标识的方法也可称为Virtual extension ...

  • JDK1.8新特性

    1.default关键字 java里,接口是不能有方法的实现的。1.8通过default关键字可以实现 作用是什么...

  • java8 新特性总结

    java8新特性 1.接口方法默认实现:java8中接口方法可以有默认实现,需要加入default关键字。 2.L...

  • Java default关键字

    在阅读Collection源码时,发现Collection接口继承了接口Iterable,Iterable内部有两...

  • Kotlin中的open关键字

    Java 中的final 关键字 在 Java 开发中默认可以被继承的类不需要添加 final 关键字,如需不想被...

  • JAVA基础

    1.枚举类(6.10) 2.JAVA关键字:default,public,protected,private,ab...

  • java访问控制权限以及复用类

    1、访问控制权限 java访问控制关键字共有:private default protected public,注...

  • 接口的新特性

    Java 8中允许接口中包含具有具体实现的方法,该方法称为 “默认方法”,默认方法使用 default 关键字修饰...

  • Java8新特性-003-Java8接口中的默认方法与静态方法

    Java 8中允许接口中包含具有具体实现的方法,该方法称为“默认方法”,默认方法使用default 关键字修饰。 ...

网友评论

    本文标题:Java中容易被遗忘的default关键字

    本文链接:https://www.haomeiwen.com/subject/rdifkctx.html