java接口里面可以定义变量么?
答案是:可以,但必须是public static final的。
既然JDK1.7开始支持接口中存在default方法和static方法,那么这些方法在实现上,难免需要一些变量提供数据支持。
先看一个例子:
//基于JDK1.8
//IA.java
public interface IA {int a = 100;double NUM = 1;//等价于public static final double NUM = 1;String name = "IA";void say();default void print() {System.out.println("IA:print()");}default void pritA() {System.out.println("IA: " + name);}
}//IB.java
public interface IB {int b = 200;double NUM = 2;String name = "IB";void say();default void print() {System.out.println("IB:print()");}default void pritB() {System.out.println("IB: " + name);}
}//AB.java
public class AB implements IA, IB {public static void main(String[] args) {AB ab = new AB();//ab.name 报错,不能确定是IA中的name还是IB中的System.out.println(a);//100 因为a和b本质上是静态成员,在静态方法里面可以直接访问System.out.println(b);//200System.out.println(IA.NUM);//1.0System.out.println(IB.NUM);//2.0System.out.println(IA.name);//IASystem.out.println(IB.name);//IBab.say();//AB:say()ab.print();//AB:print()ab.pritA();//IA: IAab.pritB();//IB: IB}//必须实现接口中未实现的方法,并且根据排序规则,实现的是IA中的say()@Overridepublic void say() {System.out.println("AB:say()");}//必须重写IA和IB中重复(签名相同)的default方法,否则调用print时不知道调用IA中的实现,还是IB中的。@Overridepublic void print() {System.out.println("AB:print()");}
}
据此得出结论:
- 接口中的成员变量默认且只能是public static final的,加这几个访问修饰符是多余的。
- 接口中的成员变量在实现类中可以直接访问(不管是静态方法还是非静态方法),如果父接口中有重复出现的成员变量,则只能带上接口名加以区分。
- 接口中default修饰的方法,为子类提供默认实现。
- 子类实现多个接口,多个接口中有同样签名的方法时,根据排序规则,以写在前面的接口为准。如果父接口中的default方法有重复,则子类必须重写此方法(不然,多个接口中分别提供了各自的实现,子类会不知道调用哪一个)。
java接口里面可以定义变量么?相关推荐
- Java接口中的成员变量为什么必须是static ?
接口的含义 接口就是提供一种统一的协议, 而接口中的属性也属于协议中的成员.它们是公共的,静态的,最终的常量.相当于全局常量. 在interface里面的变量都是public static final ...
- java接口中只能定义常量和抽象方法_接口中只能定义常量和抽象方法。( )_学小易找答案...
[判断题]在可见光吸光光度法中,为保证吸光度测量的灵敏度,入射光始终选择 λ max. [判断题]接口中只能定义常量和抽象方法.( ) [单选题]类与对象的关系是 ( ) [单选题]某物质的摩尔吸光系 ...
- abstract类中不可以有private的成员_我要告诉你:java接口中可以定义private私有方法...
在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...
- Java接口中的成员变量为什么必须是public static final?
在interface里面的变量默认都是public static final 的.所以可以直接省略修饰符: String param="ssm"://变量需要初始化 为什么接口要规 ...
- Java接口中的成员变量为什么必须声明为public static final?
我想对于每个Java程序员来说,接口都不陌生,接口中的方法也经常使用.而接口中的成员变量,就显得用得少一点, 而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而 ...
- java接口中只能定义常量和抽象方法_java基础19. 下列有关接口的叙述错误的是哪项?() A.接口中只能包含抽象方法和常量 B.一个类可以实现多个接口...
共回答了21个问题采纳率:81% 选择错误的. A 接口中只能包含抽象方法和常量 这个是正确的 下面给你说一下抽象类和接口的区别:抽象类由abstract关键字来修饰,接口由interface关键字来 ...
- Java接口属性值定义_Java接口(interface)的定义和使用
Java-接口interface定义和使用 1.什么是接口 Java为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩容子类能力. 即:Java中使用抽象类/父类表示通用属性时,每个类只能继承 ...
- java和C#中 定义变量,加一个小括号是什么意思。。。
在群里灌水发现,有人这样定义字符串,感觉很好奇..又问了群友,群友说这样定义没问题.. String strtemp = ("test"); 我自己试了下,java和C#都可以,C ...
- java接口方法实现_Java接口的简单定义与实现方法示例
本文实例讲述了Java接口的简单定义与实现方法.分享给大家供大家参考,具体如下: 1.接口是Java中最终要的概念,接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成. 2.接口的 ...
最新文章
- 微信小程序 文字换行
- Java 构造方法与成员方法的区别
- 用正则表达式判断一个二进制数是否能被3整除
- 和FBI杠上了 苹果聘前亚马逊信息安全副总裁
- 共赴CIO时代,永洪BI如何推动企业数字化转型与创新?
- vue-cli webpack 打包报错:Unexpected token: punc (()
- Using Oracle Data Integrator Open Tools
- 常用docker命令
- 原理优先的重要性_就signal探讨
- ASP.NET MVC 3 RC2 更新的内容
- 为什么要参加PMP考前培训?有什么好处?
- OpenRefine中的正则表达式
- 无线电通信天线的种类
- 微信状态栏隐藏 HTML,完美解决微信video视频隐藏控件和内联播放问题
- am相干解调matlab文档,AM调制与相干解调
- git下载单个文件夹
- 对接支付宝流程【网页支付,手机网页支付,APP支付】
- fuzzy extractor 模糊提取器的代码解读和实现
- Android初级教程 - 四大存储之SP存储
- 用stlstack实现深搜_同心筑共未来,深信服是认真的
热门文章
- Python中Tkinter模块的Canvas控件绘制jpg图片到指定区域
- 【CodeForces - 1647D】Madoka and the Best School in Russia(分类讨论,因数分解)
- 【Python】pyqt5-----QObject
- 不查日历怎么知道任何一天是星期几
- java获取usb设备的相关信息
- mysqlcheck命令时提示: bash: mysqlcheck: command not found
- 请问一下我这里显示非法字符是哪里出问题哎
- C#实现向手机发送验证码短信
- Nginx配置之负载均衡、限流、缓存、黑名单和灰度发布
- RTX 3090运行报错:RuntimeError: CUDA error: no kernel image is available for execution on the device