日期:2014-05-20  浏览次数:20723 次

刚开始学习,问一个概念上的问题
public   class   Bean1   {
        private   final   int   a=32;

        public   void   one(int   ss)
        {
                int   name=0;
                name=ss;
                System.out.println(ss+a);
        }
}

public   class   Bean2   extends   Bean1{

        Bean2   bn2=new   Bean2();

        public   void   two()
        {
                bn2.one(222);
        }
}

public   class   demo   {
        public   demo()   {
        }
        public   static   void   main(String[]   args)
        {
                Bean1   bn=new   Bean1();
                bn.one(222);
                Bean2   bnn2   =new   Bean2();
                bnn2.two();
        }
}

在这段程序中,如果将子类Bean2中的  
      Bean2   bn2=new   Bean2();
一句去掉,并且将
      bn2.one(222);  
一句改为
      this.one(222);    
就没有问题,否则就显示“at   bean.Bean2. <init> (Bean2.java:21)”这是为什么?




------解决方案--------------------
在Bean2 bn2=new Bean2();前面加个static就行了,我的看法是在main方法里只能调用static型变量,bnn2.two()调用bn2.one(222),而bn2不是static型,所以出现错误.
------解决方案--------------------
Bean2 bn2=new Bean2();是实例变量,要想在方法中用的话就一定要把它设为static才行

不过还建义再加上个private,否则你的程序可能藕合度太高