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

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

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

答:

首先接口是一种高度抽象的"模版",,而接口中的属性也就是’模版’的成员,就应当是所有实现"模版"的实现类的共有特性,所以它是public static的 ,是所有实现类共有的 .假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,如何区分呢?

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

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

转载于:https://www.cnblogs.com/langtianya/archive/2013/03/07/2947365.html

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

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

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

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

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

  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 static final来修饰数组与接口变量

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

  7. java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析

    本文实例分析了java中成员变量与局部变量区别.分享给大家供大家参考.具体分析如下: 成员变量:在这个类里定义的私有变量,属于这个类. 创建以及使用成员变量 public class Person { ...

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

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

  9. java枚举类与成员变量的关系_深入理解枚举类

    深入理解枚举 最近刚学习完JVM相关知识,想到枚举既然这么异类,那就从字节码角度来分析一下它.有关枚举的讲解,很多博客已经很详细了,这里我们就从字节码的角度重新来认识一下它. 枚举类是一种特殊的类,它 ...

最新文章

  1. 【工业串口和网络软件通讯平台(SuperIO)教程】七.二次开发服务驱动
  2. python调用webservice接口实例_python发布webservice接口
  3. R语言用户自定义函数的语法结构、编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)、编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)、应用自定函数
  4. 在红帽中安装oracle,在红帽企业Linux 5.4中安装Oracle Database 10g
  5. KZWFoudation系列之Router的设计
  6. Office365 Manager Plus之报表
  7. 遍历所有点的最短路径python_所有节点最短路径
  8. Web Components 入门
  9. Win32反汇编(四)栈的工作原理与堆栈平衡,函数方法参数的调用约定
  10. 自动驾驶对公路基础设施有何深刻影响?(上)| 自动驾驶系列
  11. Google Daydream实验室:VR设计的三大要素
  12. Unity中的资源管理-资源类型和基本使用
  13. 素材.html,素材标签.html
  14. 陶哲轩实分析 习题6.6.5
  15. C# 判断圆与矩形的冲突
  16. window下nginx实现图片缩放实操
  17. Sharding-JDBC 源码之 SQL 改写
  18. 纯JS省市区三级联动(行政区划代码更新至2015-9-30)
  19. 三星android平板,三星也不忘Android平板,或推带虹膜识别的Galaxy Tab S4
  20. 四十二、Docker-虚拟化入门

热门文章

  1. 华为(英国)招聘CPU/GPU架构及系统软件工程师
  2. 自监督学习的一些思考
  3. 如何识别新加的计算机硬盘,图文解说win10系统无法识别新加的机械硬盘的具体技巧...
  4. tmp ubuntu 自动删除吗_tmp 目录文件被自动清理问题的调查
  5. mysql客户端centos离线安装_mysql离线安装部署centos
  6. pythonunicode和str_Python中的str与unicode处理方法
  7. Dockerfile 常用命令
  8. 自适应滤波器设计及matlab实现,(终稿)自适应滤波器设计及Matlab实现.doc(OK版)...
  9. 迁移学习-使用预训练的Inception v3进行宠物分类
  10. java 4位数,java 找出4位数的所有吸血鬼数字