Java接口组成(jdk8,jdk9)

接口在我们之前的印象中,它是所有方法都没有方法体的这么一个形式出现,接口中可以有抽象方法(public abstract修饰)和常量(public static final修饰),但是到了jdk8版本的时候,接口中可以有方法体的方法,它们分别是默认方法和静态方法,之后到了jdk9的时候又出现了私有方法。

默认方法:
主要解决的问题:当接口中有多个方法的时候,有的业务可能不需要接口中的全部方法,而只是需要部分方法,但是jdk8之前的版本是必须将所有的方法进行一个实现,这样就显得非常不友好,于是乎就出现了默认方法,他的格式:

public default 返回值类型 方法名(参数列表){ 方法体 }

它不是抽象方法,有方法体,同时不强制被重写,但是可以被重写,只是重写的时候需要去掉default关键字,在idea中写默认方法的时候,发现public是灰色显示的,说明他是可以被省略的,default则不能省略。

应用:

package com.csf;
jdk8
//接口
public interface DefaultInterface {
    void show1();
    default void show3(){
        System.out.println("show3");
    }
}
//实现
public class DefaultInterImpl implements DefaultInterface{
    @Override
    public void show1() {
        System.out.println("show1");
    }
    //可被重写,不重写的话直接调用接口中的default方法
    @Override
    public void show3() {
        System.out.println("super show3");
    }
}
//测试
public class DefaultDemo {
    public static void main(String[] args) {
        DefaultInterface defaultInterface = new DefaultInterImpl();
        defaultInterface.show3();
        defaultInterface.show1();
    }
}

静态方法

格式:

public static 返回值类型 方法名(参数列表){ 方法体 }

同样,它有方法体,但是在调用接口中静态方法的时候不是通过实现类名或者对象名调用的,而是只能通过接口名调用,就跟普通静态方法一样,通过类名调用。它的public修饰可以省略,但是static不能被省略。

应用:

package com.csf;
//jdk8
//接口
public interface StaticInterface {
    void staticMethod1();
//    default方法可以被实现类重写,如果不重写默认调用接口中的方法
    default void staticMethod2(){
        System.out.println("staticMethod2");
    }
//    static方法只能通过接口名进行调用
    static void staticMethod3(){
        System.out.println("staticMethod3");
    }
}
//实现类
public class StaticInterfaceimpl implements StaticInterface{
    @Override
    public void staticMethod1() {
        System.out.println("staticMethod1");
    }

}
//测试
public class StaticInterfaceDemo {
    public static void main(String[] args) {
        StaticInterface staticInterface = new StaticInterfaceimpl();
        staticInterface.staticMethod1();
        staticInterface.staticMethod2();
//        只能通过接口名来进行调用
        StaticInterface.staticMethod3();
    }
}

私有方法:

主要解决的问题和产生原因,静态方法在jdk9中出现,其实jdk8已经为它的出现埋下了伏笔,因为jdk8中,咱们已经有了默认方法和静态方法,如果这两个方法体中存在大量一样的代码,那么我们是否需要将他们抽取出来进行统一管理,并且减少代码重复率,而且这个抽取出来的共性方法是不需要外部使用的,所以可以用私有方法隐藏起来。

格式:

private 返回值类型 方法名(参数列表){ 方法体 }
private static 返回值类型 方法名(参数列表){ 方法体 }

需要注意的是:默认方法可以调用私有的静态方法和非静态方法,而静态方法只能调用私有的静态方法。

应用:

package com.csf;

public interface PrivateInter {
    default void method1(){
        System.out.println("method1");
        bigPerson();
     //   System.out.println("大人,老臣做不到啊");
    }
    default void method2(){
        System.out.println("method2");
        bigPerson();
     //   System.out.println("大人,老臣做不到啊");
    }
//私有方法可以针对默认方法和静态方法中共性的输入输出进行集中管理,通过调用来减少代码的书写
    private void bigPerson(){
        System.out.println("大人,老臣做不到啊");
    }

    static void show1(){
        System.out.println("show1");
       bigPerson1();
    //    System.out.println("大人,老臣做不到啊");
    }
    static void show2(){
        System.out.println("show2");
        bigPerson1();
      //  System.out.println("大人,老臣做不到啊");
    }

    private static void bigPerson1(){
        System.out.println("大人,老臣做不到啊");
    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

折翼、csf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值