jdk1.8之--接口

jdk1.8java接口的定义添加了新特性,比如可以有默认的实现方法,以及静态方法(或者称为类方法)。这里对javajdk1.8中的相关特性,以及使用方法做个简单的总结。

 

接口用法以及注意事项

 

首先来看一个简单的例子:

 

public interface RenderService {
    //默认为public static final
    int pc_page = 0;
 
    //默认为public abstract
    void render();
 
    //默认是public
   default void cache(){
        System.out.println("接口default方法:缓存页面");
    }
 
    //静态方法,默认是public
    static void cdn(){
        System.out.println("接口静态方法:推送cdn缓存");
    }
}

 可以看到,在接口中可以定义如下4种类成员:

1、常量:接口中定义的常量默认就是被public static final修饰(并且只能被public static final修饰),也就是全局静态常量。可以直接通过类名(或者说接口名)访问。

2、普通方法:接口中定义的普通方法默认是被public abstract修饰(并且只能被public abstract修饰),需要由实现类实现该方法。

3default方法:接口中定义的default方法默认是被public修饰(并且只能被public修饰),由于已经提供了默认方法,实现类可以直接使用也可以重写。

4、静态方法:接口可以被看做是一种特殊的类,也可以称之为类方法,默认是被public修饰(并且只能被public修饰)。

 

需要注意的是在接口中不能定义default static方法。

 

 代码测试

 

对应接口中的常量和静态方法,可以直接通过接口名调用,无需创建实现类对象。但如果要使用普通方法和default方法就必须创建实现类对象,通过该对象进行调用。针对上面的接口,可以通过如下的main方法进行测试:

public class Main {
    public static void main(String[] args) {
        //使用常量
        System.out.println("接口常量:"+RenderService.pc_page);
        //使用静态方法
        RenderService.cdn();
     
        RenderService renderService = new TestRenderService();
        //使用default方法
        renderService.cache();
        //使用实现类方法
        renderService.render();
    }
 
 
}
class TestRenderService implements RenderService{
    @Override
    public void render() {
        System.out.println("子类实现方法:渲染页面");
    }
}

在测试代码中可以看到可以直接通过RenderService类名使用常量和静态方法,而接口中定义的default方法和普通方法,必须通过实现类TestRenderService的对象进行调用。

 

 总结

 

Jdk1.8中接口的新特征,主要是把抽象类中的部分特征提取到接口中。在某些情况下,可以直接用接口来代替抽象类,使接口的使用更加灵活。但不能说接口就能完全替代抽象类,毕竟他们的作用不同。

接口的作用是制订一种通用规范(这也是为什么接口中的所有方法和常量都是public的)。

抽象类的作用是对普通类进行一步的公共抽象提取。

猜你喜欢

转载自moon-walker.iteye.com/blog/2412590