黑马程序员技术交流社区

标题: 关于接口 [打印本页]

作者: 蓝枫    时间: 2014-3-24 23:35
标题: 关于接口
  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是如何调用的,求解释!
作者: 钟成军    时间: 2014-3-25 00:00
我是这么理解的
Test类实现了接口Inter,那么Test类相当于这样了
class Test implements Inter
{
        public static final int NUM=3;
        public void show(){}
}
也就Test类中有了常量NUM,因为NUM是静态的,所以可以通过类名调用它
作者: 月影释    时间: 2014-3-25 00:27
可以不靠谱的理解为 接口就是多继承
作者: yujiangjiao    时间: 2014-3-25 01:22
接口可以看作是一个特殊的抽象类,Test 实现了接口Inter,那么Test 就继承了Inter ,因为public static final int NUM=3;是静态的,静态成员可直接被类名调用,即Test.NUM
作者: 歌癫    时间: 2014-3-25 01:46
  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>
复制代码


作者: trhthyj    时间: 2014-3-25 12:52
Test类实现了Inter类,所以Test里面就有一个NUM,又因为NUM是静态的,类名可以调用,所以就可以用Test.NUM
作者: 追逐    时间: 2014-3-25 13:06
Test.NUM
NUM是一个常量值。而常量值是在类的加载的时候就已经加载进了常量池。
而在java语言中。静态的只能被类名调用。不能被对象调用。
以为不论是被静态修饰的变量还是函数都是优先于对象存在的。
只要是被静态修饰的变量和函数。因为它优先于对象存在。所以对象是找不到它的。只能通过类名.去调用类中的被静态修饰的变量或者函数。这种方式不论是抽象类还是在接口,正常类中都是通用的
作者: 橸瑩膤漃寞林    时间: 2014-3-25 14:26
Test.NUM是类名调用成员,class Test implements Inter因为Test已经实现了Inter,就相当于Test里面已经有了Num。
作者: 心?=忐§忑]    时间: 2014-3-25 14:42
因为NUM是一个静态的,也就是说用static定义的,用static定义的属性或方法用类名调用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2