java接口定义常量研究
和同事讨论到,在接口中定义常量的问题,引发了争论,即,假如在接口中定义变量,是否需要用static来限定的问题,或者说用static和不用static会有什么区别。
引论
package spring.interfaceTest;
public interface IAnimal {
// 定义成静态变量
public static int num = 10;
// 定义成非静态变量
public int num2=20;
}
即上述的常量定义,到底哪个是正确的。
接口的定义
- 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,
接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
引用某位学者定义,interface即标准;即interface用于定义一个通用行的标准,因而interface并不会为某个特殊的类进行定义接口或者变量。
那么interface是没有成员变量的,即interface定义的变量针对所有类均生效,因此变量是static的。
所以上面的定义,public static int num = 10;和public int num = 10;是等价的。
讨论1
interface的public是否必须?声明成private会怎么样?
如上面描述,interface是标准,标准是给别人用的,定义成private是没有意义的。所以interface默认就是public。
因此
private void saying();
定义这么个方法,直接编译器会报错的。
讨论2
是否可以嵌套定义内部接口
public interface IAnimal {
interface data{
int num1=1;
int num2=2;
};
}
调用
@Test
public void testDog(){
System.out.println(IAnimal.data.num1);
}
经过验证可以使用,参参照标准的定义,不难理解,只是标准嵌套标准而已,在大标准下有一个小标准。
讨论3
类里是否可以定义接口?
同理可得,将接口如果定义在类里面,也是具有同样的作用,相当于一个类持有了一个标准,那么整个类的实例都将持有这个标准。
package spring.interfaceTest;
public class Dog {
interface data{
int num1=1;
int num2=2;
};
}
同理可以使用
总结
interface作为一种标准,本身就是static,为所有类共同使用,因此不存在归属interface本身或者单独为某个类定义的变量或者方法