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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余银桂 中级黑马   /  2012-6-14 17:11  /  1547 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余银桂 于 2012-6-14 17:50 编辑
  1. interface Foo{
  2.                           int k=0;
  3.                }
  4. public class Test2 implements Foo{
  5.          public static void main(String args[]){
  6.                     int i;
  7.                          Test2 test =new Test2();
  8.                          i=test.k;    //这个是什么意思?
  9. i=Test2.k;  //这个又是什么?
  10.                          i=Foo.k; //这个能直接调用?
  11.    }
  12. }


  13. 求各位帮忙解释一下这三个东西...
复制代码

5 个回复

倒序浏览
这是一个在接口中定义属性的示例,需要注意的是:接口中的属性默认是static和final的,而静态属性可以直接通过类名访问
1) i=test.k;因为Test2实现了接口Foo,跟继承是一样的,那么Test2中的对象也可以访问到Foo中的k属性
2)   i=test.k;同样因为Test2实现了接口Foo,那么Test2中也可以访问到类名去访问到Foo中的k属性
3)   i=Foo.k;就是可以用类名(接口是特殊的类)来直接访问静态属性。
回复 使用道具 举报
首先,接口中的属性必定是静态和final的,所以i=Foo.k可以直接调用,这就是静态属性可以用类名加属性名调用。
其次,Test2实现了接口,那就具备接口中所有的属性。那么所以Test2中实现上已经有一个成员属性int k=0;所以以Test2创建的实例对象都可以直接掉用k。所以可以test.k
最后,因为这个k在接口中是静态和final的,那么在Test2中也是静态和final的。那么Test2.k 类名加静态属性直接调用!
回复 使用道具 举报
本帖最后由 郑传庆 于 2012-6-14 17:51 编辑

可以找一些相关接口的资料看下,比较简单

public class tewlf implements Foo {

        public static void main(String args[]) {
                int i;
                tewlf test = new tewlf();
                i = test.k; // 这个是什么意思?-------------这里是用tewlf的对象test调用接口Foo里的k
                 
                i = tewlf.k; // 这个又是什么?----------这里是直接用tewlf类调用接口Foo里的k
                 
                i = Foo.k; // 这个能直接调用?------可以,接口不能直接实例,但可以通过接口类来实现实例化:Foo fo = new tewlf()
        }

      
}


interface Foo {
         int k = 0;
}
回复 使用道具 举报
1.(i=test.k;)Test2实现接口Foo,所以继承了k,test.k是将test对象的变量k付给变量i。
2.(i=Test2.k;)接口Foo中成员由static和final修饰,如果不写,系统默认。对于静态成员,可以通过类名.成员名来访问
3.(i=Foo.k;)k是静态成员,所以可通过类名直接访问。

评分

参与人数 1黑马币 +10 收起 理由
chyljy + 10 赞一个!

查看全部评分

回复 使用道具 举报
{:soso_e113:}谢了,一下被三个东西弄晕了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马