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

来源:7-7 Java 中的静态内部类

勤奋学习的kid

2015-09-23 19:06

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

//外部类
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();
 }
}

写回答 关注

2回答

  • 无动于衷
    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+一个类才是实例化一个对象的表达式。

    GNEZ

    我试了一下横线的代码,在我这(eclipse luna)会报错 直接用外部类类名调用没有问题

    2015-10-02 16:22:53

    共 1 条回复 >

  • 天启之魂
    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();更合适

    GNEZ 回复勤奋学习的k...

    HelloWorld.hobby();(用类名.方法名调用静态方法)HelloWorld.hobby;(用类名.成员名调用静态成员变量)

    2015-10-02 16:35:16

    共 2 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530715 学习 · 6091 问题

查看课程

相似问题