黑马程序员技术交流社区

标题: 内部类的问题, 请大家帮忙看看 [打印本页]

作者: 任献东    时间: 2014-10-12 15:51
标题: 内部类的问题, 请大家帮忙看看

  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呢???
作者: tiancairc    时间: 2014-10-12 16:48
http://bbs.itheima.com/thread-147581-1-1.html
作者: SelonLiao    时间: 2014-10-12 16:55
同学,你应该知道,一个类想要访问另外一个类的成员属性时,就需要创建对象,然后通过对象来访问属性。
如果num没有用static 来修饰,那就访问num时需要创建对象才能访问。 如果要直接访问就必须用static。
而show就是因为不是静态方法,所以在调用的时候要创建对象,然后通过对象来访问该方法。
作者: 英雄传说ER    时间: 2014-10-12 17:02
简单一句话 “静态内部类只能访问外部类的静态成员 ” 这是规定 没有为什么
还有一句话 “一个类如果有静态方法这个类一定是静态的”==“静态方法只能存在于静态类”
这是作为初学者学习的概念性的东西


作者: 任献东    时间: 2014-10-12 17:47
tiancairc 发表于 2014-10-12 16:48
http://bbs.itheima.com/thread-147581-1-1.html

谢谢  帖子很给力  学习中
作者: 任献东    时间: 2014-10-12 17:49
SelonLiao 发表于 2014-10-12 16:55
同学,你应该知道,一个类想要访问另外一个类的成员属性时,就需要创建对象,然后通过对象来访问属性。
如 ...

哦  明白了 谢谢
作者: Nullifier    时间: 2014-10-12 20:50
英雄传说ER 发表于 2014-10-12 17:02
简单一句话 “静态内部类只能访问外部类的静态成员 ” 这是规定 没有为什么
还有一句话 “一个类如果有静态 ...

单例设计模式类就没静态啊,非静态方法要调用必须使用类的对象,静态方法则可以直接类名.方法名()
作者: 英雄传说ER    时间: 2014-10-12 21:00
Nullifier 发表于 2014-10-12 20:50
单例设计模式类就没静态啊,非静态方法要调用必须使用类的对象,静态方法则可以直接类名.方法名() ...

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

我是说  类中有静态方法那没类也必须静态这句不太严谨
作者: 琳以沫    时间: 2014-10-12 21:13
学习中。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2