为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

//外部类
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 回答

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

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

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

0 回复 有任何疑惑可以回复我~
#1

GNEZ

我试了一下横线的代码,在我这(eclipse luna)会报错 直接用外部类类名调用没有问题
2015-10-02 回复 有任何疑惑可以回复我~

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

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

    si.show();更合适

0 回复 有任何疑惑可以回复我~
#1

勤奋学习的kid 提问者

我的代码打进去会报错,你这个是对的,但是这个实例化过程我看不懂能解释下吗? HelloWorld.SInner这个是什么意思?是说外部类下的静态内部类?可以用.连接?
2015-09-24 回复 有任何疑惑可以回复我~
#2

GNEZ 回复 勤奋学习的kid 提问者

HelloWorld.hobby();(用类名.方法名调用静态方法)HelloWorld.hobby;(用类名.成员名调用静态成员变量)
2015-10-02 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信