问答详情
源自:7-7 Java 中的静态内部类

静态内部类和成员内部类有区别吗?调用两者中的方法不一样是吗?如何区别?

 顺便看下这个代码中的调用方法哪里不对?

//外部类
public class HelloWorld {
   
    // 外部类中的静态变量score
    private static int score = 84;
   
    // 创建静态内部类
 public    static      class SInner {
        // 内部类中的变量score
        int score = 91;
       
  public void show() {
   System.out.println("访问外部类中的score:" +HelloWorld.score            );
   System.out.println("访问内部类中的score:" + score);
  }
 }

 // 测试静态内部类
 public static void main(String[] args) {
  // 直接创建内部类的对象
        HelloWorld hello=new HelloWorld();
        SInner si=hello.new SInner();
       
        // 调用show方法
  si.show();
 }
}

提问者:勤奋学习的kid 2015-09-23 19:06

个回答

  • 无动于衷
    2015-09-23 22:42:08
    已采纳

    你可以把静态内部类、成员内部类 与 静态变量、成员变量类比来看。

    静态的东西是属于 一个类(或者说这个类所有对象共有的),成员的东西是属于一个具体对象的,当你每实例化了一个对象,这些对象都会拥有各自的成员变量,非静态方法。当然静态内部类,成员内部类也与此类似。

    public class HelloWorld {
        
        // 外部类中的静态变量score
        private static int score = 84;
        
        // 创建静态内部类
     public    static      class SInner {
            // 内部类中的变量score
            int score = 91;
            
      public void show() {
       System.out.println("访问外部类中的score:" +HelloWorld.score            );
       System.out.println("访问内部类中的score:" + score);
      } 
     }

     // 测试静态内部类
     public static void main(String[] args) {
      // 直接创建内部类的对象
            HelloWorld hello=new HelloWorld();
            SInner si=hello.new SInner();
            
            // 调用show方法
      si.show();
     }
    }

    我认为画横线的部分写的有些问题(当然你这样写也不会报错),静态内部类(想一下静态方法)的实例用外部类类名去调用就可以了,像是这样:

    new HelloWorld. SInner();至于为什么不是HelloWorld.new SInner()自己好好体会一下吧,new+一个类才是实例化一个对象的表达式。

  • 天启之魂
    2015-09-23 23:41:50

     HelloWorld hello=new HelloWorld();
            SInner si=hello.new SInner();        
            // 调用show方法
      si.show();

    改为HelloWorld.SInner si=new HelloWorld.SInner();

        si.show();更合适