Java接口不同版本之间的变动

本文所使用的demo来自https://www.geeksforgeeks.org/private-methods-java-9-interfaces/

Java接口

一直到jdk7之前,接口中只能包含两个内容,

  • 常量
  • 抽象方法
// Java 7 program to illustrate 
// private methods in interfaces 
public interface TempI { 
    public abstract void method(int n); 
} 

class Temp implements TempI { 
    @Override
    public void method(int n) 
    { 
        if (n % 2 == 0) 
            System.out.println("geeksforgeeks"); 
        else
            System.out.println("GEEKSFORGEEKS"); 
    } 

    public static void main(String[] args) 
    { 
        TempI in1 = new Temp(); 
        TempI in2 = new Temp(); 
        in1.method(4); 
        in2.method(3); 
    } 
} 

jdk8允许在接口中增加default方法以及static方法,因此接口中可以包含4类数据

  • 常量
  • 抽象方法
  • static方法
  • default方法
// Java 8 program to illustrate 
// static, default and abstract methods in interfaces 
public interface TempI { 

    public abstract void div(int a, int b); 

public default void
    add(int a, int b) 
    { 
        System.out.print("Answer by Default method = "); 
        System.out.println(a + b); 
    } 

    public static void mul(int a, int b) 
    { 
        System.out.print("Answer by Static method = "); 
        System.out.println(a * b); 
    } 
} 

class Temp implements TempI { 

    @Override
    public void div(int a, int b) 
    { 
        System.out.print("Answer by Abstract method = "); 
        System.out.println(a / b); 
    } 

    public static void main(String[] args) 
    { 
        TempI in = new Temp(); 
        in.div(8, 2); 
        in.add(3, 1); 
        TempI.mul(4, 1); 
    } 
} 

jdk9中引入的私有方法以及私有静态方法,因此接口中可以包含6类数据

  • 常量
  • 抽象方法
  • static方法
  • default方法
  • private方法
  • private static方法
// Java 9 program to illustrate 
// private methods in interfaces 
public interface TempI { 

    public abstract void mul(int a, int b); 

public default void
    add(int a, int b) 
    { 
// private method inside default method 
        sub(a, b); 

// static method inside other non-static method 
        div(a, b); 
        System.out.print("Answer by Default method = "); 
        System.out.println(a + b); 
    } 

    public static void mod(int a, int b) 
    { 
        div(a, b); // static method inside other static method 
        System.out.print("Answer by Static method = "); 
        System.out.println(a % b); 
    } 

    private void sub(int a, int b) 
    { 
        System.out.print("Answer by Private method = "); 
        System.out.println(a - b); 
    } 

    private static void div(int a, int b) 
    { 
        System.out.print("Answer by Private static method = "); 
        System.out.println(a / b); 
    } 
} 

class Temp implements TempI { 

    @Override
    public void mul(int a, int b) 
    { 
        System.out.print("Answer by Abstract method = "); 
        System.out.println(a * b); 
    } 

    public static void main(String[] args) 
    { 
        TempI in = new Temp(); 
        in.mul(2, 3); 
        in.add(6, 2); 
        TempI.mod(5, 3); 
    } 
} 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。