zoukankan      html  css  js  c++  java
  • 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的是那个匿名内部类的对象。

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

  • 相关阅读:
    java1.5新特性
    [转载]传智播客_SQL入门
    集合类的应用
    多线程的应用
    包的使用
    异常的应用finally与总结
    自定义异常以及runtime类
    异常的处理
    SpringMVC_05 利用spring框架来处理异常
    SpringMVC_04 拦截器 【拦截器的编程步骤】【session复习?】
  • 原文地址:https://www.cnblogs.com/Wangjiaq/p/8696495.html
Copyright © 2011-2022 走看看