A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小漠 中级黑马   /  2014-10-7 23:14  /  1680 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么要定义成public static final

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

10 个回复

倒序浏览
final声明的变量称为常量,不可被修改。public表示公共,全局的意思。有了final和public的常量就是全局变量了。而接口是由全局常量和抽象方法组成。
回复 使用道具 举报
tiancairc 发表于 2014-10-7 23:18
final声明的变量称为常量,不可被修改。public表示公共,全局的意思。有了final和public的常量就是全局变量 ...

为什么一定是static final呢?
如果没有这两股关键字修饰会怎样
回复 使用道具 举报
小漠 发表于 2014-10-7 23:29
为什么一定是static final呢?
如果没有这两股关键字修饰会怎样

也不会出现问题啊,public static final String AAA写成String AAA也可以啊,因为定义接口的时候就默认是全局常量。所以在接口中你可以省略public static final关键字。
回复 使用道具 举报
1.接口必须要具体类实现才有意义,所以必须是public
2. 接口中的数据对所有实现类只有一份,所以是static
3.要使实现类为了向上转型成功,所以必须是final的.这个举例子很好理解.比如接口A,A有变量value.实现类A1,A2,可以向上转型.假如代码中有一句:
A a=null;
a=....(2)实际实现类
System.out.println(a.value);
利用向上转型,可以得到接口a的值,在第2步中,我不关你是实现类A1,还是new A2(),通过转型,我们可以得到正确的值.要是类中可以更改,我们得不到一个统一的值,接口也没有了意义

回复 使用道具 举报
杨佳名 发表于 2014-10-8 00:08
1.接口必须要具体类实现才有意义,所以必须是public
2. 接口中的数据对所有实现类只有一份,所以是static
3. ...

你这是百度上的,我没看懂才来这里问的。。。
回复 使用道具 举报
小漠 中级黑马 2014-10-8 10:05:04
7#
tiancairc 发表于 2014-10-7 23:35
也不会出现问题啊,public static final String AAA写成String AAA也可以啊,因为定义接口的时候就默认是 ...

我的意思是接口为什么有这样的规范。。。
回复 使用道具 举报
小漠 发表于 2014-10-8 10:05
我的意思是接口为什么有这样的规范。。。

规范啊,随着学习的深入慢慢的就理解了,初学者先知道是什么,学得深了自然就理解了。技术就是这样,规定这样用了,这样用就可以了,不必去纠结那么多。
回复 使用道具 举报
小漠 发表于 2014-10-8 10:04
你这是百度上的,我没看懂才来这里问的。。。

哪里不懂可以说一下。
回复 使用道具 举报
杨佳名 发表于 2014-10-8 12:52
哪里不懂可以说一下。

2.接口中的数据对所有实现类只有一份,所以是static

这一句,为什么要确保实现类里面是一份,接口的方法就没有方法体,为什么变量就要是一份。我理解的是static是为了方便用接口直接调用。但是觉得不能为了方便就非得是static,难道是为了防止子类改写成员变量,可以final可以确保不改变值呀

3.要使实现类为了向上转型成功,所以必须是final的.这个举例子很好理解.比如接口A,A有变量value.实现类A1,A2,可以向上转型.

再说这一句,如果不是final,实现类改变了,但是用实现类去调用这个变量不久可以分清楚到底是谁了。。
回复 使用道具 举报
可以这样想,接口其实就是一个model。
如果可以是非static的话,因一个类可以继承多个接口,出现重名的变量就没办法来区分了。必须保证是static的
如果可以定义非final话,当方法是abstract的,存在可变成员变量但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马