答案是:可以,但必须是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()");}
}

据此得出结论:

  1. 接口中的成员变量默认且只能是public static final的,加这几个访问修饰符是多余的。
  2. 接口中的成员变量在实现类中可以直接访问(不管是静态方法还是非静态方法),如果父接口中有重复出现的成员变量,则只能带上接口名加以区分。
  3. 接口中default修饰的方法,为子类提供默认实现。
  4. 子类实现多个接口,多个接口中有同样签名的方法时,根据排序规则,以写在前面的接口为准。如果父接口中的default方法有重复,则子类必须重写此方法(不然,多个接口中分别提供了各自的实现,子类会不知道调用哪一个)。

java接口里面可以定义变量么?相关推荐

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

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

  2. java接口中只能定义常量和抽象方法_接口中只能定义常量和抽象方法。( )_学小易找答案...

    [判断题]在可见光吸光光度法中,为保证吸光度测量的灵敏度,入射光始终选择 λ max. [判断题]接口中只能定义常量和抽象方法.( ) [单选题]类与对象的关系是 ( ) [单选题]某物质的摩尔吸光系 ...

  3. abstract类中不可以有private的成员_我要告诉你:java接口中可以定义private私有方法...

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

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

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

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

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

  6. java接口中只能定义常量和抽象方法_java基础19. 下列有关接口的叙述错误的是哪项?() A.接口中只能包含抽象方法和常量 B.一个类可以实现多个接口...

    共回答了21个问题采纳率:81% 选择错误的. A 接口中只能包含抽象方法和常量 这个是正确的 下面给你说一下抽象类和接口的区别:抽象类由abstract关键字来修饰,接口由interface关键字来 ...

  7. Java接口属性值定义_Java接口(interface)的定义和使用

    Java-接口interface定义和使用 1.什么是接口 Java为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩容子类能力. 即:Java中使用抽象类/父类表示通用属性时,每个类只能继承 ...

  8. java和C#中 定义变量,加一个小括号是什么意思。。。

    在群里灌水发现,有人这样定义字符串,感觉很好奇..又问了群友,群友说这样定义没问题.. String strtemp = ("test"); 我自己试了下,java和C#都可以,C ...

  9. java接口方法实现_Java接口的简单定义与实现方法示例

    本文实例讲述了Java接口的简单定义与实现方法.分享给大家供大家参考,具体如下: 1.接口是Java中最终要的概念,接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成. 2.接口的 ...

最新文章

  1. 微信小程序 文字换行
  2. Java 构造方法与成员方法的区别
  3. 用正则表达式判断一个二进制数是否能被3整除
  4. 和FBI杠上了 苹果聘前亚马逊信息安全副总裁
  5. 共赴CIO时代,永洪BI如何推动企业数字化转型与创新?
  6. vue-cli webpack 打包报错:Unexpected token: punc (()
  7. Using Oracle Data Integrator Open Tools
  8. 常用docker命令
  9. 原理优先的重要性_就signal探讨
  10. ASP.NET MVC 3 RC2 更新的内容
  11. 为什么要参加PMP考前培训?有什么好处?
  12. OpenRefine中的正则表达式
  13. 无线电通信天线的种类
  14. 微信状态栏隐藏 HTML,完美解决微信video视频隐藏控件和内联播放问题
  15. am相干解调matlab文档,AM调制与相干解调
  16. git下载单个文件夹
  17. 对接支付宝流程【网页支付,手机网页支付,APP支付】
  18. fuzzy extractor 模糊提取器的代码解读和实现
  19. Android初级教程 - 四大存储之SP存储
  20. 用stlstack实现深搜_同心筑共未来,深信服是认真的

热门文章

  1. Python中Tkinter模块的Canvas控件绘制jpg图片到指定区域
  2. 【CodeForces - 1647D】Madoka and the Best School in Russia(分类讨论,因数分解)
  3. 【Python】pyqt5-----QObject
  4. 不查日历怎么知道任何一天是星期几
  5. java获取usb设备的相关信息
  6. mysqlcheck命令时提示: bash: mysqlcheck: command not found
  7. 请问一下我这里显示非法字符是哪里出问题哎
  8. C#实现向手机发送验证码短信
  9. Nginx配置之负载均衡、限流、缓存、黑名单和灰度发布
  10. RTX 3090运行报错:RuntimeError: CUDA error: no kernel image is available for execution on the device