• java内部类


    内部类的主要作用如下:

    1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

    2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

    3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

    内部类可分为以下几种:

    成员内部类

    静态内部类

    方法内部类

    匿名内部类

    //外部类Outer

    public class Outer{

           private int a = 99;     //外部类的私有属性

           //内部类Inner

           public class Inner{

                  int b = 2;    //内部类的成员属性

                  public  void test(){

                         System.out.println( "访问外部类中的a: " + a );

                         System.out.println( "访问内部类中的b: " + b );

                  }

           }

          

           //测试成员内部类

           public static void main(String[] args){

                  Outer o = new Outer();     //创建外部类对象,对象名为o

                  Inner i = o.new Inner();    //使用外部类对象创建内部类对象,对象名为i

                  i.test();      //调用内部类对象的test方法

           }

    }

    成员内部类的使用方法:

    1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等

    2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a

    3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

    静态内部类是 static 修饰的内部类,这种内部类的特点是:

    1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 

    2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

    3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类对象名= new 内部类();

    //外部类

    public class SOuter{

           private int a = 99;    //外部类的私有变量

           static int b = 1;       //外部类的静态变量

           //静态内部类

           public static class SInner{

                  int b = 2;    //内部类的变量

                  public void test(){

                         System.out.println( "访问外部类中的b: " + SOuter.b );

                         System.out.println( "访问内部类中的b: " + b );

                  }

           }

          

           //测试静态内部类

           public static void main(String[] args){

                  SInner si = new SInner();   //直接创建内部类的对象

                  si.test();     //调用test方法

           }

    }

    运行结果:  访问外部类中的b:1

                           访问外部类中的b:2

    方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

    //外部类

    public class MOuter{

           //外部类中的方法

           public void show(){

                  final int a = 25;    //常量

                  int b = 13;   //变量

                  //方法内部类

                  class MInner{

                         int c = 2;    //内部类中的变量

                         public void print(){

                                System.out.println( "访问外部类的方法中的常量a: " + a );

                                System.out.println( "访问内部类中的变量c: " + c );

                         }

                  }

                  MInner mi = new MInner();   //创建方法内部类的对象

                  mi.print();  //调用内部类的方法

           }

           //测试方法内部类

           public static void main(String[] args){

                  MOuter mo = new MOuter();    //创建外部类的对象

                  mo.show();    //调用外部类的方法

           }

    }

    一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

  • 相关阅读:
    通过PHP类的反射来实现依赖注入
    hyperf 基础篇
    composer install 遇到 lock 文件 warning
    laravel carbon 怎么计算两个时间的差?
    laravel 属性类型转换$casts
    Java Web安全之代码审计
    【代码审计】————2、aspx代码审计-2
    【代码审计】————1、aspx代码审计-1
    【逻辑漏洞技巧拓展】————9、业务逻辑漏洞探索之上传漏洞
    【逻辑漏洞技巧拓展】————8、业务逻辑漏洞探索之敏感信息泄露
  • 原文地址:https://www.cnblogs.com/seven1314pp/p/5807274.html
Copyright © 2020-2023  润新知