我是靠谱客的博主 能干银耳汤,最近开发中收集的这篇文章主要介绍接口中定义变量必须为public static final的原因,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

https://blog.csdn.net/a_long_/article/details/51729447


在interface里面的变量默认都是public static final 的。所以可以直接省略修饰符: 

String param="ssm";//变量需要初始化 



为什么接口要规定成员变量必须是public static final的呢? 



答: 

首先接口是一种高度抽象的"模版",,而接口中的属性也就是’模版’的成员,就应当是所有实现"模版"的实现类的共有特性,所以它是public 的 ,是所有实现类共有的 .否则具体实现类不能使用该变量,则就没有了定义的意义。 

static的原因是,假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,如何区分呢?所以必须定义成static的,以便区分。 
例如一个类实现了两个不同的接口,这两个接口中有相同名字的变量定义,示例代码如下: 
public class MultiInmpl implements InTF, InTFOther

/** 
* @param args 
*/ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 
MultiInmpl m = new MultiInmpl(); 
//如果实现的接口中有同名的变量,则不能引用 
System.out.println(m.str);//str在2个接口中都有定义 



以上代码编译错误!!! 
Multiple markers at this line 
- The field m.str is ambiguous 
- Line breakpoint:MultiInmpl [line: 11] - main(String[])
 


其次,接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别? 又接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。 



最后,接口只是对事物的属性和行为更高层次的抽象 。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则(Open-Closed Principle )的一种体现。 

转自暗里着迷


最后

以上就是能干银耳汤为你收集整理的接口中定义变量必须为public static final的原因的全部内容,希望文章能够帮你解决接口中定义变量必须为public static final的原因所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部