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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱晓辉 初级黑马   /  2012-5-14 22:13  /  2322 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

能距离呢说明吗?

4 个回复

正序浏览
没有局部类这一说法,你说的应该是内部类在局部位置上的一种情况,因为内部类分为在成员位置和局部位置两种情况,建议再看看毕老师的基础教程,说的很详细,靠谱!!!
回复 使用道具 举报
    定义在类中方法之外的内部类分为实例内部类和静态内部类。
  实例内部类自动持有外部类的实例的引用,即可以访问外部类的所有变量;
  静态内部类可以直接访问外部类的静态成员;
  定义在方法中的内部类叫局部内部类,该类只能访问被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();
}
}


回复 使用道具 举报
你说的是内部类中的局部内部类吧   内部类放在成员位置可以被private,static成员修饰符修饰,被static修饰的内部类只能访问外部类中的静态成员。如果内部类放在局部位置也可以直接访问外部类中的成员,同时可以访问所在局部中的局部变量,但必须是被final修饰的。
回复 使用道具 举报
(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)必须通过内部类的实例来访问

  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马