Java中接口中的方法定义规则

最近在做某个公司校招的笔试的时候,遇到了如下一个题:

题目如下:(多选题)请选择以下接口定义正确的方法()

A:public static void main (String[] args);

B:private void test();

C:public void test2();

D:static void test3(){};

正确答案为:C D。

原因为:A没有提供默认实现,B选择使用了private来修饰(在接口中是不允许使用private修饰符来修饰方法的)。

在做这个题的时候,自己基本是处于懵逼状态,因为关于接口自己只知道:接口中的定义的方法一定是抽象的方法,不允许有默认实现。

而方法前面是允不允许使用private来修饰,不知道。允不允许定义静态方法,不知道。

是不是好尴尬。

今天写了一个Demo实验了下,发现关于接口中定义方法的规则有如下几点:

1、接口中是可以定义静态方法的,静态方法必须要有实现。且这个静态方法只能用public修饰。例如:public static void test(){} 或 static void test(){}.//public省略不写默认也是用public来修饰。<

静态方法的方法名是可以任意的,即可以定义main方法,例如:public static void main (String[] args){}。

public interface InterfaceDemo {
         static void staticMethod(){
             System.out.println("static method");
         }
         public static void main(String[] args){
             System.out.println("main method");
         }

         private static void privateStaticMethod(){ //报错

         }

         protected static void protectedStaticMethod(){//报错

         }
    }

2、对于普通方法,修饰符为: public, abstract, default以及组合 public abstract

public interface InterfaceDemo2 {

         public void test();//public
         void test2();// default
         abstract void test3();//abstract
         public abstract void test4();//public abstract

    }

总结如下

关于接口中的方法定义规则为:only public, abstract, default, static and strictfp are permitted;即只允许public,abstract,default,static,public abstract,public static,来作为修饰接口中的方法,其它是不允许的。

最后对接口中的属性进行一点说明

首先你要弄清接口的含义.接口就是提供一种统一的’协议’,而接口中的属性也属于’协议’中的成员.它们是公共的,静态的,最终的常量.相当于全局常量。

在interface里面的变量都是public static final 的。所以你可以这样写:

  public static final int i=10;

  或则

  int i=10;(可以省略掉一部分)

  注意在声明的时候要给变量赋予初值,不能是默认初值。

例如:

public interface InterfaceDemo3 {

        int a=3;
        public int b = 3;
        public static int  c = 4;
        public static final int d =5;

    }

基于接口的种种特性,因此,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则的一种体现。