关于变量

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

探究java接口中的变量与方法的更多相关文章

  1. java接口中成员变量和方法的默认修饰符(转)

    Java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final St ...

  2. Java接口中的成员变量默认为(public、static、final)、方法为(public、abstract)

    interface”(接口)可将其想象为一个“纯”抽象类.它允许创建者规定一个类的基本形式:方法名.自变量列表以及返回类型,但不实现方法主体.接口也可包含基本数据类型的数据成员,但它们都默认为publ ...

  3. java 接口中的成员变量与方法

    java接口中变量的默认修饰符为 public static final int i = 3; 相当于 public static final int i = 3; java接口中方法的默认修饰符为 ...

  4. Java接口中的成员变量的意义

    转自:http://blog.csdn.net/ameyume/article/details/6189749 在interface里面的变量都是public static final 的.所以你可以 ...

  5. Java接口中的成员变量为什么必须声明为public static final?

    我想对于每个Java程序员来说,接口都不陌生,接口中的方法也经常使用.而接口中的成员变量,就显得用得少一点,而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而且 ...

  6. Java接口中的方法

    接口中可以含有变量和方法.但是,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法 ...

  7. 教你在Java接口中定义方法

    基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. 假设我们现在有一个接口:TimeClie ...

  8. java中static变量和方法的总结

    转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...

  9. Java 8——接口中个的默认方法和静态方法

    在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性. 但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静 ...

随机推荐

  1. Vue2.0父子组件之间的双向数据绑定问题解决方案

    对于vue 1.0项目代码,如果把vue换成vue 2.0,那么之后项目代码就完全奔溃不能运行,vue 2.0在父子组件数据绑定的变化(不再支持双向绑定)颠覆了1.0的约定,很遗憾. 解决方案只有两种 ...

  2. Java IO(一)

    在Java中,所有的io类都放在java.io包中. 在IO操作中,我们总是会从一个源数据读取到一个目标数据.那么这个源数据和目标数据可以是文件,流等等.那最常见的就是文件,就像我们在本地电脑上写入东 ...

  3. BZOJ4423 Bytehattan

    Description 比特哈顿镇有n*n个格点,形成了一个网格图.一开始整张图是完整的. 有k次操作,每次会删掉图中的一条边(u,v),你需要回答在删除这条边之后u和v是否仍然连通. Input 第 ...

  4. xml 制作 RSS 订阅源

    首先制作一个 RSS 模板,模板的文件名是 feed.xml,代码如下: <?xml version="1.0" encoding="utf-8"?> ...

  5. PTA 邻接表存储图的广度优先遍历(20 分)

    6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...

  6. 备忘:MySQL中修改表中某列的数据类型、删除外键约束

    -- MySQL中修改表中某列的数据类型 ALTER TABLE [COLUMN] 表名 MODIFY 列名 列定义; -- 删除外键约束 SHOW CREATE TABLE 表名; -- 复制CON ...

  7. java总结之基础类型与常量池

    1.基础类型有byte short int long char boolean float double八种. 其中byte short int long char 的包装类型是存放在常量池(用来维护 ...

  8. CentOS7.2安装mysql5.6

    1.卸载系统自带的Mariadb [root@localhost~]# rpm -qa|grep mariadb //查询出已安装的mariadb [root@localhost~]# rpm -e ...

  9. C语言 字符串 字符串处理操作 字符串与函数

    字符数组的定义和初始化 宏常量+1  强调了字符串的最大强度 推荐忽略长度的定义 不能对所指向的存储单元内容修改,除非是字符串数组的定义 因为指针变量指向的是字符串数组的值,可以被修改. 未初始化 字 ...

  10. IOI2016Day2. paint

    题目链接:http://uoj.ac/problem/238 题目大意: 有一个长度为n的黑白序列,告诉你所以k个极长连续黑段长度和顺序.有一些位置的颜色已知,需要判断剩下未知的位置哪些颜色 一定是白 ...