【Java修饰符之一】Java中Default关键字的两种使用方法

Java关键字Default的两种使用方法


其实之前一直都没有关注过还有default这关键字的存在,最近重新回温《Java语言程序设计》这本书时,想总结总结常用的一些修饰符。偶然发现…嗯..是这样的.

两种使用方法:

据我观察,总的来说,default的用法不多,只有两种:

  • switch语句的时候使用default
  • 在定义接口的时候使用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里的方法。在这里的例子中就是key为8,所以key与所有的case的值都不匹配,所以输出星期天Sunday.

第二种使用方法:


接口的定义IntefercaeDemo,定义一个接口,里面有两个具体的方法,和一个抽象方法

IntefercaeDemo .java

public interface IntefercaeDemo {

    //具体方法
    default void showDefault(){
        System.out.println("this is showDefault method");
    }
    static void showStatic(){
        System.out.println("this is showStatic method");
    }

    //没有实现的抽象方法
    void sayHi();
}

LearnDefault 实现IntefercaeDemo 接口。

LearnDefault .java

public 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();

    }
}

说明:

  • JDK1.8中为了加强接口的能力,使得接口可以存在具体的方法,前提是方法需要被default或static关键字所修饰。

总结:

扫描二维码关注公众号,回复: 950037 查看本文章
  • default修饰的目的是让接口可以拥有具体的方法,让接口内部包含了一些默认的方法实现。
  • 被default修饰的方法是接口的默认方法。既只要实现该接口的类,都具有这么一个默认方法,默认方法也可以被重写。
  • 我们可以想象这么一个场景,既实现某个接口的类都具有某个同样的功能,如果像Java8以前的版本,那么每个实现类都需要写一段重复的代码去实现那个功能,显得没有必要。这就是存在的意义。

注意:

另外这里既然提到了接口的修饰符default,那么就要注意一点,如果一个类实现了两个接口(可以看做是“多继承”),这两个接口又同时都包含了一个名字相同的default方法,那么会发生什么情况? 在这样的情况下,编译器是会报错,得到一个编译器错误,因为编译器不知道应该在两个同名的default方法中选择哪一个,因此产生了二义性。

以上是简单的对default关键字进行总结,如有错误或还有其他用法的可以留言说一声,我会去关注的。

参考网站:
[JavaBeat] - Default Keyword in Java
[HowToDoInJava] - Default Keyword in Java
[ImportNew] - Java 8新特性default方法(defender方法)介绍

个人GitHub链接,欢迎赏脸

猜你喜欢

转载自blog.csdn.net/snailmann/article/details/80231593