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

一、为什么要用final?

首先,我们应该明白一个问题。接口,实际上比抽象类更加抽象,它是最高层次的抽象。接口中的所有方法都是抽象方法,不会有任何实现方面的代码,而它的具体实现是要靠实现这个接口的具体类来具体实现的。而且,这个接口中的方法是不可更改的。同样的,接口中的变量也是不可更改的。所以,要声明为final。

接口是一种协议,协议是所有实现接口的类都必须遵守的。如果变量不是final,那么每个实现接口的类就可以更改这个变量的值,也就违反了OCP原则。

二、为什么要用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。

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

interface X {
public static final String name="123";
}
interface Y {
public static final String name="456";
}
public class Z implements X,Y {
public static void main (String [] args){
System.out.println(X.name);
System.out.println(Y.name);
}
}

转载于:https://www.cnblogs.com/CrisZjie180228/p/8716989.html

Java接口中的成员变量为什么必须声明为public static final?相关推荐

  1. Java接口中的成员变量为什么必须是static ?

    接口的含义 接口就是提供一种统一的协议, 而接口中的属性也属于协议中的成员.它们是公共的,静态的,最终的常量.相当于全局常量. 在interface里面的变量都是public static final ...

  2. Java接口中的成员变量为什么必须是public static final?

    在interface里面的变量默认都是public static final 的.所以可以直接省略修饰符: String param="ssm"://变量需要初始化 为什么接口要规 ...

  3. java 接口中的成员只有静态常量和_Java中抽象类和接口的具体区别是什么?

    谢邀,直接回答. 接口在面向对象编程中占着很重要的地位,它是对于一种事物行为的抽象提取,内部只需要持有接口的引用,外部可以根据具体事物做不同的扩展,而不修改内部的引用逻辑,它的主要作用是在框架中实现不 ...

  4. java中为按钮添加图片_我们可以在Java接口中为成员定义私有和受保护的修饰符吗?...

    java中为按钮添加图片 No, it is not possible to define private and protected modifiers for the members in int ...

  5. java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数

    如题是结论,如果有人问你Java类的成员初始化顺序和初始化块知识就这样回答他.下面是代码: package com.test;public class TestClass{// 成员变量赋值第一个执行 ...

  6. [转载] java接口中方法的默认访问修饰符为public

    参考链接: Java接口方法 如果一个接口Cup有个方法use(),有个类SmallCup实现接口Cup,则在类SmallCup中正确的是?  ( ) A.void use() { -} B.prot ...

  7. java接口里面可以定义变量么?

    答案是:可以,但必须是public static final的. 既然JDK1.7开始支持接口中存在default方法和static方法,那么这些方法在实现上,难免需要一些变量提供数据支持. 先看一个 ...

  8. java 接口中变量修饰符,Java的访问修饰符与变量的作用域讲解

    Java访问修饰符(访问控制符) Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: ? Java 的修饰符很多,分为访问修饰符和非访问修饰符.本节仅介绍访问修 ...

  9. Java中的public static final来修饰数组与接口变量

    Java中的public static final来修饰数组与接口变量 public static final来修饰数组 final对数组的作用 怎样实现对数组的public static final ...

最新文章

  1. 玩转android自定义控件二——自定义索引栏listview
  2. Winform与Webform中的对话框
  3. python中lambda 表达式(无参数、一个参数、默认参数、可变参数(*args、**kwargs)、带判断的lambda、列表使用lambda)
  4. 微软 Surface Pro、Studio、Laptop 全线更新
  5. idea、eclipse常用快捷键
  6. 第十天2017/04/25(2、企业财富库:)
  7. 【GAN优化】从动力学视角看GAN是一种什么感觉?
  8. 网速慢?不!可能是DNS出了问题! 公共DNS优选之 BAT 百度、腾讯、阿里、谷歌DNS哪个更快?
  9. html类名定义规则_HTML入门笔记1
  10. 如何才能更容易拿到大厂Offer?从理论到实践!
  11. 安装最新版本的PHPUnit后,不能使用
  12. 小目标Trick | Detectron2、MMDetection、YOLOv5都通用的小目标检测解决方案
  13. 系统分析师2020年真题解析
  14. 黑金花大理石_不同产地的黑金花大理石有哪些特点?
  15. 线性代数(一)矩阵和方程组
  16. BIP学习第一课,创建一个应用和实体并设计页面(图文)
  17. Java实现数字和人民币大写转换
  18. 为什么天蝎座出互联网大佬,我来告诉你原因!
  19. 无法启动此程序因为计算机丢失msvcr110.dll,Win7运行程序提示计算机中丢失msvcr110.dll如何解决...
  20. 虚拟路由器冗余协议(VRRP)

热门文章

  1. Leetcode 448. Find All Numbers Disappeared in an Array
  2. JS --- this(4)
  3. PHP程序员如何突破成长瓶颈(php开发三到四年)
  4. 【软考2】Java语言的基本知识汇总
  5. Django uplodify 多文件同时上传
  6. perlretut - Perl regular expressions tutorial ---- 中文版
  7. InfoPath 发布表单到SharePoint库报错
  8. 大数据相关端口号(hive hdfs spark)
  9. ubuntu16.04 wget java_linux centos ubuntu下载安装JDK wget方式下载JDK
  10. 开源性能测试工具JMeter快速入门(二)