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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 止询初衷 中级黑马   /  2014-7-24 22:03  /  1349 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public interface Face{   
int counter = 40;     
}      
public class Test implements Face{   
private static int counter;   
public static void main(String[]args){
      System.out.println(++counter);         
}     
}
这个运行的结果是1;感觉好像知道为什么,但又很模糊。求具体解释一下。接口里的常量的默认修饰符为public static final,意思是counter的值不再变了,类实现接口之后,又有变量counter,这个counter被static修饰,不是共享的么?有点郁闷了,求解释。

7 个回复

倒序浏览
interface Face{   
        int counter=40;     
}   

class Demo implements Face
{
        private static int counter;   
        public static void main(String[] args)
        {
                 System.out.println(Face.counter + "......" + ++counter);      
        }
}
静态方法里面不能直接使用在外面定义的非静态方法和非静态属性。因为jvm加载顺序,静态为先的。非静态的东西只有使用new一个对象才存在。 静态通过 类名来访问
结果就是:40.........1!!!

回复 使用道具 举报
masai158 发表于 2014-7-24 22:25
interface Face{   
        int counter=40;     
}   

上面的是接口,默认的修饰符是public static final
回复 使用道具 举报
LZ有答案了通知我一声。。。。
回复 使用道具 举报
这是多态。

一般说多态都会说到方法,但其实成员属性也是有多态的。参考多态,这个问题是不是就理所应当了呢
回复 使用道具 举报
wisely 发表于 2014-7-25 04:09
这是多态。

一般说多态都会说到方法,但其实成员属性也是有多态的。参考多态,这个问题是不是就理所应当了 ...

。。。。。。我。。。。。。
回复 使用道具 举报
wisely 中级黑马 2014-7-25 23:20:59
7#
止询初衷 发表于 2014-7-25 22:27
。。。。。。我。。。。。。

楼主对我说的似乎不以为然,那我就再多说一些。

Face中的counter是它自己的,Test中的counter是它自己的,谁的是谁的,虽然都在方法区的静态区放着,但它们是不一样的,就好像都有前缀,比如,三年级的小明,二年级的小明。如果要访问接口Face中的counter,那么就要写成Face.counter。

又或者,Face f=new Test();   f.counter也能访问到Face中的counter。

一句话总结,这是多态…………
回复 使用道具 举报 1 0
。。。。。。。。。。。好吧。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马