您的位置:首页 > 编程语言 > Java开发

探究java接口中的变量与方法

2016-09-13 11:43 246 查看

关于变量

java接口里的变量都是默认 pubic static final的

为啥?

public 接口得能被所有对象调用

static 这个变量是属于接口本身,而不是实现了接口的对象的 具体来说

至于这个问题,是和Java语言的本身机制有关。我们知道Java不支持多继承,但是一个类可是现实多个接口。我们假设有两个接口A和B,而类C实现了接口A和B。假设,此时,A和B中都有一个变量N,如果N不是static类型的,那么在C中该如何区分N到底是A的还是B的呢?而,如果是static类型的,我们可以通过A.N和B.N来区别调用A或者B中的成员变量N。

final 如果变量不是final,那么每个实现接口的类就可以更改这个变量的值,也就违反了OCP原则。

所以下面的声明方式都是OK的

interface TestI{
int a=5;
static int b=12;
final int k=10;
}
不过如果你直接给接口里扔一个int c,且没有指定值就不行了,为什么?因为它是final

关于方法

这个得分java的版本来说

在jdk1.7下

interface TestI{
void a();
abstract void b();
//Illegal modifier for the interface method c; only public & abstract are permitted
//	protected void c();
//	static void d(){
//		System.out.println(13);
//	};
}
看到了把,在1.7下方法可以是public或者abstract的,但是不能出现final或者static,static的情况

interface TestI{
void a();
public void k();
abstract void b();
//Illegal modifier for the interface method c;
// only public & abstract are permitted
//  final void c();
//	protected void c();
//	static void d(){
//		System.out.println(13);
//	};
}
不过在jdk1.8下

interface TestI{
void a();
public void k();
abstract void b();

//static void f2(); 这个不行 必须得有方法体
//同理default也得有方法体
static void d(){
System.out.println(13);
};

default void ss(String zoneString) {
System.out.println(123);
}
}
看到了吧static和default可以修饰方法了,而且得也有方法体

参考资料

关于接口中的变量

http://blog.csdn.net/qiumengchen12/article/details/44852023

关于final的使用

http://blog.csdn.net/dlf123321/article/details/44493691
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐