A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 任献东 中级黑马   /  2014-10-12 15:51  /  1505 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. class Outer//外部类。
  2. {
  3.         private static int num = 4;
  4.         
  5.         static class Inner//内部类
  6.         {
  7.                 void show()
  8.                 {
  9.                         System.out.println("Inner show run..."+num);
  10.                 }
  11.                
  12.         }
  13. }
  14.         



  15. class InnerClassDemo
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 Outer.Inner in = new Outer.Inner();
  20.                 in.show();
  21. }
复制代码

Inner是用static修饰的,但是show没用static修饰啊。。。可是为什么访问num时,要用static修饰num呢???

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

9 个回复

倒序浏览
回复 使用道具 举报
同学,你应该知道,一个类想要访问另外一个类的成员属性时,就需要创建对象,然后通过对象来访问属性。
如果num没有用static 来修饰,那就访问num时需要创建对象才能访问。 如果要直接访问就必须用static。
而show就是因为不是静态方法,所以在调用的时候要创建对象,然后通过对象来访问该方法。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
简单一句话 “静态内部类只能访问外部类的静态成员 ” 这是规定 没有为什么
还有一句话 “一个类如果有静态方法这个类一定是静态的”==“静态方法只能存在于静态类”
这是作为初学者学习的概念性的东西

回复 使用道具 举报
tiancairc 发表于 2014-10-12 16:48
http://bbs.itheima.com/thread-147581-1-1.html

谢谢  帖子很给力  学习中
回复 使用道具 举报
SelonLiao 发表于 2014-10-12 16:55
同学,你应该知道,一个类想要访问另外一个类的成员属性时,就需要创建对象,然后通过对象来访问属性。
如 ...

哦  明白了 谢谢
回复 使用道具 举报
英雄传说ER 发表于 2014-10-12 17:02
简单一句话 “静态内部类只能访问外部类的静态成员 ” 这是规定 没有为什么
还有一句话 “一个类如果有静态 ...

单例设计模式类就没静态啊,非静态方法要调用必须使用类的对象,静态方法则可以直接类名.方法名()
回复 使用道具 举报
Nullifier 发表于 2014-10-12 20:50
单例设计模式类就没静态啊,非静态方法要调用必须使用类的对象,静态方法则可以直接类名.方法名() ...

大哥 没明白你要表达什么 内部类当然可以是非静态的啊 这里说的是如果是静态内部类 那么 它只能访问外部类的静态成员 或者 被fianl修饰的变量(其实不能改变的变量就是常量) 这有什么问题么
回复 使用道具 举报
英雄传说ER 发表于 2014-10-12 21:00
大哥 没明白你要表达什么 内部类当然可以是非静态的啊 这里说的是如果是静态内部类 那么 它只能访问外部 ...

我是说  类中有静态方法那没类也必须静态这句不太严谨
回复 使用道具 举报
学习中。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马