黑马程序员技术交流社区

标题: 【已解决】 java中内部类跟外部类 [打印本页]

作者: 黑马王楠    时间: 2012-9-3 10:01
标题: 【已解决】 java中内部类跟外部类
本帖最后由 黑马王楠 于 2012-9-3 10:23 编辑

都有什么区别,什么时候该有static
作者: 孔德智    时间: 2012-9-3 10:10
简单的说,所谓内部类,其实就是定义在类中的类!内部类可以实现接口,当类与接口或者接口与接口发生方法命名冲突的时候,还必须用内部类来实现接口。内部类作为其外部类的一个成员,与其他成员一样,可以直接访问其外部类的数据和方法。只不过相比较外部类只有public和默认的修饰符不同,内部类作为一个成员,可以被任意修饰符修饰。
但内部累定义在局部时不能被成员修饰符修饰,也不能访问他所在局部中的变量,只能访问被final修饰的局部变量。
当内部累定义了静态成员时,这个内部累是要加static的。当外部类中的静态方法访问内部类时,内部类也是static的。
作者: 小黑马    时间: 2012-9-3 10:11
外部类,内部类,匿名类,外部类就是两个类并列的
class A {
}
class B {
},

内部类:
class A {
  class B {}
},
第一:B可以直接使用包涵它的类的成员变量,内部类不能被除包涵类以外的类调用;
第二:还有就是匿名类,也是内部类 classA{new {}}省略定义类名直接定义方法和使用,这个适用于代码比较简单且这个类不需要被其他类调用

这一块说起来简单,用起来复杂,需要你自己去上网找资料
作者: 程有愿    时间: 2012-9-3 10:12
内部类的访问规则:内部类可以直接访问外部类中 的成员包括私有
外部类要想访问内部类就必须建立内部类的对象
  访问格式:内部类在外部类的成员位置上,并没有被私有,如果想要在其他的外部类建立内部类的对象
  外部类名.内部类名  变量名=外部类对象.内部类对象
      Outer.Inner  i1=new Outer().new Inner();  
     内部类在外部类的成员位置上,可以被成员修饰符所修饰
     比如 private 将内部类对其他外部类进行封装
           static  内部类能被静态修饰变成静态内部类,具有静态属性
           并只能访问外部类中的静态成员了,出现了访问局限
          1: 那么在其他外部类中怎么直接访问内部静态类中的非静态成员呢呢?
            new   Out.Inner().function();
            2:那么如何在其他外部类中访问内部静态类中的静态成员呢?
              Out.Inner.function();
             如果内部内中有静态成员,那么该内部类必须定义为静态类
            当外部内中的静态成员访问内部类中的成员时,内部类必须也要定义为static



作者: 何要民    时间: 2012-9-3 10:13
内部类可以实现接口,当类与接口或者接口与接口发生方法命名冲突的时候,还必须用内部类来实现接口。

假设一个public方法不是静态的 那么你必须实例化才能访问到这个方法
  假设一个案例 电影院一个电影的票数 如果你不用静态的话 那么一个柜台实例化一个票数的变量 那么A柜台实例化默认100 卖出10张 应该还剩下90张 但是在B柜台上看 票数还是100张  如果用静态的话 那么A卖了10张 那么B刷新一下 就编程90张了  简单说如果你的多个实例需要用的同一个数据的话 那个数据最好用静态变量来保存 当然了 静态变量也不需要实例化才能访问的
作者: 孙沛    时间: 2012-9-3 10:14
首先,内部类就是在一个(外部)类中再定义一个类,但是,有一点,所有使用内部类的地方都可以不用内部类同样解决问题,只是为了使程序更加简介,便于命名规范和划分层次结构,可以在类中再次定义类,即引入内部类进行对方法的封装。

其次,内部类可以理解是作为外部类的一个成员,它依附于外部类而存在的。内部类可以为静态(内部类可以有静态属性,前提是必须是静态内部类)。可以用protect和private修饰,而外部类只能用public和default修饰。

内部类又分为:成员内部类,局部内部类,静态内部类,匿名内部类。

成员内部类:作为外部类的一个成员存在,与外部类的属性、方法并列。
局部内部类:在方法中定义的内部类称为局部内部类。
静态内部类:静态内部类定义在类中 ,在任何方法之外,用 static 修饰。 静态内部类只能访问外部类的静态成员。
匿名内部类:匿名内部类就有点特殊了,通过匿名类实现。另外你们内部类是唯一一种没无构造方法的类。
作者: 黑马王楠    时间: 2012-9-3 10:22
谢谢大家的热情解答




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