接口名为什么可以直接调用它里面的属性值

apple-ping 2014-10-09 04:59:59

代码如下:
interface num{
int k=6;
}
public class NumIpml implements num{

static int k=10;
public static void main(String[] args) {
System.out.println("接口中的属性 k的值为 :k="+num.k);
System.out.println("实现类中的属性k的值为:k="+NumIpml.k);
}

}
输出结果:
接口中的属性 k的值为 :k=6
实现类中的属性k的值为:k=10

为什么“System.out.println("接口中的属性 k的值为 :k="+num.k); ” 这句代码可以用接口名直接调用它里面的属性值?
...全文
584 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
apple-ping 2014-10-12
  • 打赏
  • 举报
回复
恩,明白,谢啦
sunbo624 2014-10-11
  • 打赏
  • 举报
回复
引用 5 楼 applEove 的回复:
意思就是:可以将接口看做一个特殊类来对待,类名可以直接调用静态属性,所以接口名也可以直接静态属性,不知这样理解可不可以的?
静态资源是在类加载时就分配好空间并初始化的 不依赖实例 实例的变量(成员变量)是new之后才分配空间
apple-ping 2014-10-10
  • 打赏
  • 举报
回复
意思就是:可以将接口看做一个特殊类来对待,类名可以直接调用静态属性,所以接口名也可以直接静态属性,不知这样理解可不可以的?
Kifile 2014-10-09
  • 打赏
  • 举报
回复
你可以这样理解抽象类是特殊的类,他里面有抽象方法,不能直接初始化 而接口则是特殊的抽象类,它里面全是抽象方法,他的成员变量也全是 public static final 的 虽然接口不能创建对象,但是对象可以实现接口,这样我们在创建接口的时候就会拥有对象的所有属性,你也可以调用对象,至于怎么在内存中运行,你可以详细看看 java 的继承机制
apple-ping 2014-10-09
  • 打赏
  • 举报
回复
引用 2 楼 kifile 的回复:
接口中的属性默认为 public static final, 因此你可以直接通过接口名进行访问
接口中的属性默认是public static final 的,但是,这样调用和类有什么区别呢? 接口不能创建对象,那么用接口名直接调用属性,在内存中是怎么运行的呢,对着一直不理解,跪求大神详细讲解一下
Kifile 2014-10-09
  • 打赏
  • 举报
回复
接口中的属性默认为 public static final, 因此你可以直接通过接口名进行访问
apple-ping 2014-10-09
  • 打赏
  • 举报
回复
本人菜鸟一枚,希望众大神多多指教。。。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧