Java接口中的成员变量为什么必须是public static final?
在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?相关推荐
- Java接口中的成员变量为什么必须声明为public static final?
我想对于每个Java程序员来说,接口都不陌生,接口中的方法也经常使用.而接口中的成员变量,就显得用得少一点, 而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而 ...
- Java接口中的成员变量为什么必须是static ?
接口的含义 接口就是提供一种统一的协议, 而接口中的属性也属于协议中的成员.它们是公共的,静态的,最终的常量.相当于全局常量. 在interface里面的变量都是public static final ...
- java 接口中的成员只有静态常量和_Java中抽象类和接口的具体区别是什么?
谢邀,直接回答. 接口在面向对象编程中占着很重要的地位,它是对于一种事物行为的抽象提取,内部只需要持有接口的引用,外部可以根据具体事物做不同的扩展,而不修改内部的引用逻辑,它的主要作用是在框架中实现不 ...
- java中为按钮添加图片_我们可以在Java接口中为成员定义私有和受保护的修饰符吗?...
java中为按钮添加图片 No, it is not possible to define private and protected modifiers for the members in int ...
- java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数
如题是结论,如果有人问你Java类的成员初始化顺序和初始化块知识就这样回答他.下面是代码: package com.test;public class TestClass{// 成员变量赋值第一个执行 ...
- Java中的public static final来修饰数组与接口变量
Java中的public static final来修饰数组与接口变量 public static final来修饰数组 final对数组的作用 怎样实现对数组的public static final ...
- java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析
本文实例分析了java中成员变量与局部变量区别.分享给大家供大家参考.具体分析如下: 成员变量:在这个类里定义的私有变量,属于这个类. 创建以及使用成员变量 public class Person { ...
- java接口里面可以定义变量么?
答案是:可以,但必须是public static final的. 既然JDK1.7开始支持接口中存在default方法和static方法,那么这些方法在实现上,难免需要一些变量提供数据支持. 先看一个 ...
- java枚举类与成员变量的关系_深入理解枚举类
深入理解枚举 最近刚学习完JVM相关知识,想到枚举既然这么异类,那就从字节码角度来分析一下它.有关枚举的讲解,很多博客已经很详细了,这里我们就从字节码的角度重新来认识一下它. 枚举类是一种特殊的类,它 ...
最新文章
- 【工业串口和网络软件通讯平台(SuperIO)教程】七.二次开发服务驱动
- python调用webservice接口实例_python发布webservice接口
- R语言用户自定义函数的语法结构、编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)、编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)、应用自定函数
- 在红帽中安装oracle,在红帽企业Linux 5.4中安装Oracle Database 10g
- KZWFoudation系列之Router的设计
- Office365 Manager Plus之报表
- 遍历所有点的最短路径python_所有节点最短路径
- Web Components 入门
- Win32反汇编(四)栈的工作原理与堆栈平衡,函数方法参数的调用约定
- 自动驾驶对公路基础设施有何深刻影响?(上)| 自动驾驶系列
- Google Daydream实验室:VR设计的三大要素
- Unity中的资源管理-资源类型和基本使用
- 素材.html,素材标签.html
- 陶哲轩实分析 习题6.6.5
- C# 判断圆与矩形的冲突
- window下nginx实现图片缩放实操
- Sharding-JDBC 源码之 SQL 改写
- 纯JS省市区三级联动(行政区划代码更新至2015-9-30)
- 三星android平板,三星也不忘Android平板,或推带虹膜识别的Galaxy Tab S4
- 四十二、Docker-虚拟化入门
热门文章
- 华为(英国)招聘CPU/GPU架构及系统软件工程师
- 自监督学习的一些思考
- 如何识别新加的计算机硬盘,图文解说win10系统无法识别新加的机械硬盘的具体技巧...
- tmp ubuntu 自动删除吗_tmp 目录文件被自动清理问题的调查
- mysql客户端centos离线安装_mysql离线安装部署centos
- pythonunicode和str_Python中的str与unicode处理方法
- Dockerfile 常用命令
- 自适应滤波器设计及matlab实现,(终稿)自适应滤波器设计及Matlab实现.doc(OK版)...
- 迁移学习-使用预训练的Inception v3进行宠物分类
- java 4位数,java 找出4位数的所有吸血鬼数字