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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蓝枫 中级黑马   /  2014-3-24 23:35  /  1526 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. interface Inter
  2. {
  3.         public static final int NUM=3;
  4.         public abstract void show();
  5. }
  6. class Test implements Inter
  7. {
  8.         public void show(){}
  9. }
  10. class Demo
  11. {
  12. public static void main(String[] args)
  13.         {
  14.           Test a = new Test();
  15.      // System.out.print(a.NUM);
  16.       System.out.print(Test.NUM);
  17.      // System.out.print(Inter.NUM);
  18.      }
  19. }
复制代码


Test.NUM是如何调用的,求解释!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

8 个回复

倒序浏览
我是这么理解的
Test类实现了接口Inter,那么Test类相当于这样了
class Test implements Inter
{
        public static final int NUM=3;
        public void show(){}
}
也就Test类中有了常量NUM,因为NUM是静态的,所以可以通过类名调用它

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
可以不靠谱的理解为 接口就是多继承
回复 使用道具 举报
接口可以看作是一个特殊的抽象类,Test 实现了接口Inter,那么Test 就继承了Inter ,因为public static final int NUM=3;是静态的,静态成员可直接被类名调用,即Test.NUM
回复 使用道具 举报
  1. <p>interface Inter //---你这里是定义了一个接口Inter,里面只能有常量声明和方法声明,没有方法体。实现了对程序功能的扩展。
  2. {
  3.        public static final int NUM=3; //----这里定义了一个常量NUM=3,唯一性,只能赋值一次;一般公共的数值定义为常量,如圆周率π
  4.        public abstract void show(); //---声明了一个show()方法
  5. }

  6. class Test implements Inter //---你这里定义的Test类实现了Inter接口,相当于是Inter的子类,且必须实现Inter接口的所有方法
  7. {
  8.         public void show() //---实现了Inter接口中的show()方法</p><p>        {</p><p> </p><p>        }
  9. }
  10. class Demo
  11. {
  12.     public static void main(String[] args)
  13.     {
  14.          Test a = new Test();   //---你这里创建一个Test对象,并赋值给a,此时a拿到了Test对象在内存中的地址值,指向Test对象
  15.          System.out.print(a.NUM); //---Test实现了Inter接口,故是Inter的子类,a.NUM是直接调用父类的常量,输出为3
  16.          System.out.print(Test.NUM); //---Test是Inter的子类,拥有所以父类的成员,而NUM常量又是静态的,可以直接由类名.成员的方式调用
  17.          System.out.print(Inter.NUM); //---这里是类名.成员的方式,调用静态成员输出为3
  18.      }
  19. }</p><p>关于你的提问就解释到这里,希望对你有帮助。</p><p>好好学习,天天向上。加油!</p>
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
Test类实现了Inter类,所以Test里面就有一个NUM,又因为NUM是静态的,类名可以调用,所以就可以用Test.NUM
回复 使用道具 举报
追逐 高级黑马 2014-3-25 13:06:49
7#
Test.NUM
NUM是一个常量值。而常量值是在类的加载的时候就已经加载进了常量池。
而在java语言中。静态的只能被类名调用。不能被对象调用。
以为不论是被静态修饰的变量还是函数都是优先于对象存在的。
只要是被静态修饰的变量和函数。因为它优先于对象存在。所以对象是找不到它的。只能通过类名.去调用类中的被静态修饰的变量或者函数。这种方式不论是抽象类还是在接口,正常类中都是通用的

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
Test.NUM是类名调用成员,class Test implements Inter因为Test已经实现了Inter,就相当于Test里面已经有了Num。
回复 使用道具 举报
因为NUM是一个静态的,也就是说用static定义的,用static定义的属性或方法用类名调用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马