黑马程序员技术交流社区

标题: 内部类与局部类有什么区别? [打印本页]

作者: 朱晓辉    时间: 2012-5-14 22:13
标题: 内部类与局部类有什么区别?
能距离呢说明吗?
作者: 任睦强    时间: 2012-5-14 22:21
(1)实例内部类   (2) 静态内部类    (3) 局部内部类
主要特征
(1)内部类的实例引用特定的外部类的实例
(2)内部类的实例不与外部类的任何实例关联
(3)可见范围是所在的方法

可用的修饰符
(1)访问控制修饰符,abstract,final
(2)访问控制修饰符,static,abstract,final
(3) abstract,final

可以访问外部类的哪些成员
(1)可以直接访问外部类的所有成员
(2)只能直接访问外部类的静态成员
(3)可以直接访问外部类的所有成员,并且能访问所在方法的final类型的变量和参数

拥有成员类型
(1)只能拥有实例成员
(2)可以拥有静态成员和实例成员
(3)只能拥有实例成员

外部类如何访问内部类的成员
(1)必须通过内部类的实例来访问
(2) 对于静态成员,可以通过内部类的完整类名来访问
(3)必须通过内部类的实例来访问

  
作者: 安浦鑫    时间: 2012-5-14 22:54
你说的是内部类中的局部内部类吧   内部类放在成员位置可以被private,static成员修饰符修饰,被static修饰的内部类只能访问外部类中的静态成员。如果内部类放在局部位置也可以直接访问外部类中的成员,同时可以访问所在局部中的局部变量,但必须是被final修饰的。
作者: 韩国军    时间: 2012-5-14 23:04
    定义在类中方法之外的内部类分为实例内部类和静态内部类。
  实例内部类自动持有外部类的实例的引用,即可以访问外部类的所有变量;
  静态内部类可以直接访问外部类的静态成员;
  定义在方法中的内部类叫局部内部类,该类只能访问被final修饰的局部变量和参数
  以下是自己通过程序进行的测试:
          接口定义如下:
interface Super
{
  public void print();
}
  //例子1:
public class Test
{
  int x=18;
  public Super getInstance()
  {
   int y=5;
   final int z=6;
   class Inner implements Super{
   public void print()
   {
   //局部内部类中访问本方法的局部变量
   System.out.println(y);//编译错误: 从内部类中访问局部变量 x;需要被声明为final
   //内部类中访问成员变量
   System.out.println(z);//正常
   System.out.println(x);//正常
   }
    return new Inner();
  }
class InnerDome
{
  public static void main(String[] args)
{
  Super s=new Test().getInstance();
  s.print();
}
}

例子2:对上面例子1的例子改变一下,从内部类->匿名内部类匿名内部类既然叫匿名,那么名字对于该类来说已经不重要,因为该匿名类的实例本来就不打算给别的类使用或重复使用,仅限于类内部使用或使用一次,所以就不需要类名了,不过因为没有类名匿名内部类也就没有构造函数了。
  在方法里面定义的局部内部类(不管是否匿名),它可无条件访问外部类的成员变量,但要访问方法的局部变量或参数,就要加final修饰符。
public Super getInstance()
{
  int x=5;
  final int y=6;
  return new Super()
  {
   public void print()
   {
    //局部内部类中访问本方法的局部变量
    System.out.println(x);//编译错误: 从内部类中访问局部变量 x;需要被声明为final
    System.out.println(y);//正常
    System.out.println(z);//正常
    }
   };
  }
public static void main(String[] args)
{
  Super s=new Test().getInstance();
  s.print();
}
}



作者: 潘东升    时间: 2012-5-15 08:30
没有局部类这一说法,你说的应该是内部类在局部位置上的一种情况,因为内部类分为在成员位置和局部位置两种情况,建议再看看毕老师的基础教程,说的很详细,靠谱!!!




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