• 内部类


    内部类

      内部类,就是在一个类里面再定义一个类,可以分为成员内部类、局部内部类、匿名内部类、嵌套内部类(static修饰)。 

      内部类是编译时的概念,编译成功后会出先两个不同的类,所以内部类的成员变量、成员方法可以是相同的。

     

    成员内部类:

      成员内部类就是定义在内的里面,类似于成员方法,它可以访问外部类的所有属性、方法。

      成员内部类自己的方法、字段不可一使用static修饰。因为用static修饰的方法或字段属于自身类的,而成员内部类只有创建了外部类的对象后才能创建。

     

     1 //外部类
     2 public class Outer {
     3     public static void main(String[] args) {
     4         //创建一个外部类对象
     5         Outer outer = new Outer();
     6         //创建一个内部类对象
     7         Outer.Inner inner = outer.new Inner();
     8     }
     9     
    10     //内部类
    11      class Inner{
    12         //static String name;//不能定义静态成员变量
    13         //内部类的构造器
    14         Inner() {
    15             System.out.println("我是内部类");
    16         }
    17     }
    18 }

     

    局部内部类:

      局部内部类就是定义在方法或者代码块中的类,他和和成员内部类一样,但是它的作用域只在定义的方法或代码块中,超出了该范围则不能使用。

     

     1 //外部类
     2 public class Outer {
     3     public static void main(String[] args) {
     4         //在代码块中定义一个内部类
     5         {
     6             class Inner {
     7                 int a = 1;
     8                 //内部类的构造器
     9                 Inner() {
    10                     System.out.println("我是内部类");
    11                 }
    12             }
    13             //创建内部类对象
    14             Inner in = new Inner();
    15         }
    16         //Inner in = new Inner();//错误,超出作用域范围
    17     }
    18 }

     

    匿名内部类:

      匿名内部类其实是创建了一个类的对象,而该对象没有名字,我们有时候只需要使用一次某个类的对象时就可以使用匿名内部类。

      注意:该类是需要定义的,如果不定义会报错。

     

    //外部类
    public class Outer {
        public static void main(String[] args) {
            //创建一个匿名对象类并获取它的成员变量
            System.out.println(new Inner() {}.a );
        }
    }
    //定义一个类
    class Inner {
        int a = 1;
    }

     

     

     

    嵌套内部类:

      使用了static修饰符修饰的成员内部类,嵌套内部类和成员内部类的不同在于,嵌套内部类可以有静态属性和方法,而成员内部类不能有

      嵌套内部类可以直接使用外部类名调用:Outer.Inner不需要创建外部类对象,也不需要创建内部类对象。

     1 //外部类
     2 public class Outer {
     3     public static void main(String[] args) {
     4         //直接使用类名访问
     5         int a = Outer.Inner.a;
     6     }
     7     static class Inner {
     8         static int a = 1;//可以有静态成员变量
     9         
    10         //内部类的构造器
    11         Inner() {
    12             System.out.println("我是内部类");
    13         }
    14     }
    15 }

     

     

     

     

     

  • 相关阅读:
    Mac下搭建SVN服务器
    iOS的扩展类,扩展属性
    关于TableViewCell高度自适应问题的整理
    关于适配的一点考虑
    Visual format language
    css命名定义
    定位之初解
    定位以及relative和absolute的结合
    float的一点想法
    javascript的学习路子
  • 原文地址:https://www.cnblogs.com/yxiaooutlook/p/7698898.html
Copyright © 2020-2023  润新知