看书里说。。内部类不能声明类变量与类方法不知道为什么?
不过写了一下程序唯一能声明类变量与方法就是把内部类先声明为类变量,但出现了一个警告:
the static method g() from A.B should be accessed in a static way 
究竟应该怎么解释。
程序如下:
class A
{
B b=new B();
void f()
{
System.out.println("i am A.");
b.g();
} static class B
{
static void g()
{
System.out.println("i am B.");
}
}
}
public class neibu {
public static void main(String args[])
{
A a=new A();
a.f();

}}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【xx21546544】截止到2008-07-19 02:08:40的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:0                        每贴平均分数:0                        
    回帖的总数量:1                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:0                        
    结贴的百分比:0.00  %               结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    内部类实例可在其外部类的实例方法中创建,此新创建内部类实例所属的外部类实例自然就是创建它的外部类实例方法对应的外部类实例。
    成员类不能与外部类重名 
    不能在成员类中定义static字段、方法和类(static final形式的常量定义除外)。因为一个成员类实例必然与一个外部类实例关联,这个static定义完全可以移到其外部类中去 
    成员类不能是接口(interface)。因为成员类必须能被某个外部类实例实例化,而接口是不能实例化的。事实上,如示例代码所示,如果你以成员类的形式定义一个接口,该接口实际上是一个静态成员类,static关键字对inner interface是内含(implicit)的。 
      

  3.   

    LZ的示例代码显然跟内部类没关系顺便说下那个warning,“静态方法一般通过类名.静态方法名的方式调用,而不是通过创建的实例(instance)去调用”。
      

  4.   

    应该还算内部类吧静态的内部类。
    本来是类和方法都没加static的,我只是试一下怎样才能在内部类里面用static方法而已
    看了2L的解释有点理解了,是不是就是在非静态内部类中如果声明类方法其实移到外部类中更好,所以JAVA就不提供在内部类中可以声明静态变量与方法这种机制了。。不知能否这样理解。。谢谢了那个warning也知道什么意思了。。谢谢这位大哥了
      

  5.   

    静态变量或者方法也可以叫做类变量或方法,直接用类名访问既可,若用对象去访问就会出这个警告(没有通过静态途径访问),试试把b.f()改为B.f()