java中内部类的相关内容

                    最近在学习安卓的一些知识,加上身体不舒服,好久没有写博客了,今天就总结一下java中的内部类的相关知识。

                    内部类,从字面着手就是在某个类的内部又定义了一个类。举个例子:

 class Outer
{
 private String index="The String is in Outer Class";
  public class Inner
  {
    String index="The String is in Inner Class";
    void print()
    {
     String index="The String is in print Method";
     System.out.println(index);
     System.out.println(this.index);
     System.out.println(Outer.this.index);
    }
  }
  void print()
  {
    Inner inner = new Inner();
    inner.print();
  }
 
  Inner getInner()//注意:必须使用此方法创建内部类实例对象
  {
   return new Inner();
  }
}

public class TestOuterAndInner
{
  public static void main(String[] args)
  {
   Outer outer = new Outer();    //先产生外部类对象
 //Outer.Inner inner = outer.getInner();//内部类前没有public时的访问方法
   Outer.Inner inner = outer.new Inner(); //利用对象的new方法
   inner.print();
  }
}

        在这段代码里面,Inner就是一个内部类,对比内部类和外部类,除了内部类是写在一个类里面,没有其他不同,所以内部类其实唯一不同就是写在类里面,它也有自己的数据成员和方法。不过正因为内部类所处位置,它可以直接访问外部类中的所有属性,因此当想要对一个类的一些属性或方法对其它类进行封装,而只对一个类开放时,就想到了用内部类。还要注意的就是内部类产生对象的方法,并且外部类无法直接访问内部类中的成员。内部类也是类,所以也可以是静态的,也可以是抽象的。

       内部类里面还有比较特殊的一种,叫匿名内部类。从文本出发,匿名肯定就是没有名字了,这个内部类就更有意思了。具体解释就是在类中需要实例化这个类的地方,通常为方法内,定义一个没有名称的类。

       举个例子:

public class TestAnonymity { 
  public static void main(String[] args) {
   Object obj = new Object() {
   public int hashCode() {
   return 42;
   }
      };
    System.out.println(obj.hashCode());
    }
 }

       这段代码里定义了一个匿名内部类,将hashCode()方法进行了覆盖。这里new Obiect()其实不是new一个Object这个大类的对象,new的是那个匿名内部类的对象。

        由于匿名内部类这种特殊的类型,它不能有构造方法,不能定义任何静态成员和方法,不能有修饰符,而且只能创建匿名内部类的一个实例。因此还是要慎用。

原文地址:https://www.cnblogs.com/Wangjiaq/p/8696495.html