• 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的是那个匿名内部类的对象。

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

  • 相关阅读:
    任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。
    【每天一个Linux命令】14. Linux中locate命令的用法
    ZetCode PyQt4 tutorial signals and slots
    ZetCode PyQt4 tutorial layout management
    ZetCode PyQt4 tutorial work with menus, toolbars, a statusbar, and a main application window
    ZetCode PyQt4 tutorial First programs
    A Simple Makefile Tutorial
    Swapping eth0 and eth1 on OK335xS board
    OK335xS U-boot 环境变量解析
    OK335xS U-boot GPIO control hacking
  • 原文地址:https://www.cnblogs.com/Wangjiaq/p/8696495.html
Copyright © 2020-2023  润新知