刚开始学习,问一个概念上的问题
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,否则你的程序可能藕合度太高