zoukankan      html  css  js  c++  java
  • 内部类

    一、关于内部类的定义

    将类定义在另一个类的内部,则成为内部类,内部类生成的class文件为:外部类$内部类;

    public class Outer {
        int num = 10;
        class Inner{
            int age = 10;
            public void print(){
                System.out.print("内部类");
            }
        }
        public void show(){
            System.out.print("外部类");
        }
    }

    根据类定义的位置可以分为成员内部类和局部内部类

    二、成员内部类的访问方式

    1.内部类可以直接访问外部类的成员属性

    2.外部类需要访问内部类的成员属性时需要创建内部类的对象

        1)在外部类的成员函数中创建内部类的对象,通过内部类对象直接访问内部类的成员。

        2)在其他类中直接创建内部类的对象。

            Outer.Inner inner = new Outer().new Inner();

    三、成员内部类访问细节

    1.成员内部类被私有化

      不能在其他类中直接创建内部类

    2.成员内部类中有静态成员时,该内部类必须使用static修饰,当成员内部类被static修饰时,可通过类名直接访问静态成员;

       Outer.Inner.静态成员

    四、当外部类,成员内部类,成员内部类的成员方法中存在同名成员变量时,在成员方法中该如何访问这三个量?

         1、访问成员方法中量:变量名

         2、访问成员内部类中:this.变量名

         3、访问外部类中:外部类.this.变量名

    public class Outer {
        int num = 10;
        class Inner{
            int num= 20;
            public void print(){
                int num = 30;
                System.out.print("num");//30
                System.out.print("this.num");//20
                System.out.print("Outer.this.num");//10
            }
        }
    }

    五、局部内部类

            包含在外部类的方法的内部的类,则为局部内部类

    六、局部内部类的访问:可以在包含内部类的方法中直接创建对象进行访问;

            注意:局部内部类只能访问所在方法的final属性

    七、匿名内部类

           就是没有类名的内部类

           作用:简化书写

           格式:

            new 父类或接口(){

                执行代码;

            }

    当只有一个调用一个内部类的方法时:

    abstract class Inner{
        abstract void show();
    }
    
    public class Outer {
        public void print(){
            new Inner() {
                public void show(){
                    System.out.print("内部类");
                }
            }.show();
        }
    }

    当需要调用内部类的两个或以上方法时,可使该类指向一个变量

    interface Inner{
        void show1();
        void show2();
    }
    
    public class Outer {
        Inner in = new Inner() {
            public void show1() {
                System.out.print("内部类1");
            }
    
            public void show2() {
                System.out.print("内部类2"); 
            }
        };
            public void print() {
                in.show1();
                in.show2();
            }
        }
  • 相关阅读:
    Appium+unittest+PageObject实例
    monkeyrunner简单用法
    Mac电脑修改系统文件夹的权限
    UIImage剪切
    LLDB 打印 frame
    打开qq在线聊天
    获取当地时间
    微信支付SDK使用心得
    获取当前星期几
    UIView相对于屏幕的frame
  • 原文地址:https://www.cnblogs.com/mercuryji/p/innerclass.html
Copyright © 2011-2022 走看看