美文网首页服务器后端开发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关键字

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