A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘利民 高级黑马   /  2013-6-14 21:22  /  2090 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-6-17 20:50 编辑

//这应该是个简单的问题,但是想了好久,发现自己还是转不过弯来,求大神解答一下,谢谢!
//为什么Test.NUM、Inter.NUM也都合法,他们分别是怎么调用NUM的。

interface Inter
{
        public static final int NUM = 3;
        public abstract void show();
}

class Test implements Inter
{
         public void show(){}
}
class Interface Demo
{
         public static void main(String[] args)
       {
                Test t = new Test();
                System.out.println(t.NUM);
                System.out.println(Test.NUM);
                System.out.println(Inter.NUM);           

        }
}

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

6 个回复

倒序浏览
从接口映射到实现类上面了 所以就可以直接调用了
回复 使用道具 举报
具体咋回事,请看代码中的注解
  1. interface Inter
  2. {
  3.         public static final int NUM = 3;
  4.         public abstract void show();
  5. }
  6. class Test implements Inter
  7. {
  8. //首先看一下这里的备注!!这里当子类Test实现了Inter的时候,事实上是会从父类中继承NUM变量的
  9. //        public static final int NUM = 3;
  10.         public void show(){}
  11. }
  12. class InterfaceDemo
  13. {
  14.         public static void main(String[] args)
  15.         {
  16.                 Test t = new Test();
  17.                 /*
  18.                  * 子类实现了Inter之后继承了Inter类中的NUM常量
  19.                  * t.NUM为子类对象,调用成员变量
  20.                  */
  21.                 System.out.println(t.NUM);
  22.                
  23.                 //因为子类继承了Inter继承了Inter中的NUM,而且,NUM为静态的,所以可以类名.变量名
  24.                 System.out.println(Test.NUM);
  25.                 //虽然说接口不能创建对象,但是接口中的对象都是静态的常量,所以也可以进行接口名.变量名
  26.                 System.out.println(Inter.NUM);           
  27.         }
  28. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 很给力!

查看全部评分

回复 使用道具 举报
简单的来说吧,Inter接口里的那个成员变量使用静态修饰的 。所以不用创建对象也可以使用,直接用(类名/接口名).变量名 调用。而Test类继承了Inter接口。自然继承了Inter里的没有私有的成员变量。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报
接口是最顶级的类了,接口中的所有方法都是没有实体的,接口有什么用呢?
在实现接口的时候,可以具体实现方法的主体,但是,如果实现一个接口,那么这个接口里面的所有方法都要实现
OK,知道这些了,定义成员变量?因为,java中没有多重继承,只可以实现多个接口,而有很多的天然属性,也就是static final这种类型数据,我们通过实现多个接口,就可以获得各种不同的天然属性。
在实现类中具体变量没有限制,只要是数据类型匹配就可以。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢各位大神们,解决了!{:soso_e191:}
回复 使用道具 举报
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用
内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马