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

    1.静态内部类

    2.成员内部类

    3.局部内部类

    4.匿名内部类

    内部类:

    使用内部类减少了命名冲突。

    一个内部类可以定义在一个类中,一个方法中甚至一个表达式中。
    内部类分为四种:
    静态内部类(static inner classes)
    成员内部类(member inner classes)
    局部内部类(local inner classes)
    匿名内部类(anonymous inner classes)

    1、静态内部类(static inner classes)

    最简单的内部类。

    只能访问外部类的静态成员变量与静态方法。

    生成静态内部类对象的方法:

    OuterClass.InnerClass inner = new OuterClass.InnerClass();

    1.1、相关使用例子:

    静态内部类:

    复制代码
     1 class StaticInner{
     2     private static int a = 1;
     3 
     4     /**
     5    * 静态内部类
     6    * 生成的类名:StaticInner$InnerClass
     7    */
     8     public static class InnerClass{
     9         //静态内部类可以声明静态的成员变量,其他的内部类不可以
    10         private static int b = 1;
    11         public void execute(){
    12             //静态内部类只能访问静态程序
    13             System.out.println(a + b);
    14         }
    15     }
    16 }
    复制代码


    main方法中使用:

    View Code


    2、成员内部类(member inner classes):

    成员内部类可以访问外部类的静态与非静态的方法和成员变量。

    生成成员内部类对象的方法:

    OuterClass.InnerClass inner = new OuterClass().new InnerClass();

    在局部内部类中访问外部类的成员变量的方法:

    OuterClass.this.a;

    2.1、相关使用例子:

    成员内部类:

    复制代码
     1 class MemberInner{
     2     private int a = 1;
     3 
     4     public void execute(){
     5         //在外部类中创建成员内部类
     6         InnerClass innerClass = this.new InnerClass();
     7     }
     8 
     9     /**
    10  * 成员内部类
    11  */
    12     public class InnerClass{
    13 
    14         //内部类可以创建与外部类同名的成员变量
    15         private int a = 2;
    16 
    17         public void execute(){
    18             //this引用的是内部类
    19             System.out.println(this.a);
    20             //在内部了中使用外部类的成员变量的方法
    21             System.out.println(MemberInner.this.a);
    22         }
    23     }
    24 }
    复制代码


    在main方法中使用:

    View Code


    3、局部内部类(local inner classes):

    类似于局部变量,不能定义为public,protected,private或者static类型。

    定义方法中,只能方法中声明为final类型的变量。

    3.1、相关使用例子:

    局部内部类:

    复制代码
     1 class LocalInner{
     2 
     3     public void execute(){
     4         final int a = 1;
     5         /**
     6  * 创建局部内部类
     7  */
     8         class InnerClass{
     9             public void execute(){
    10                 System.out.println("LocalInner Class");
    11 
    12                 //局部内部类只能访问final类型的变量
    13                 System.out.println(a);
    14             }
    15         }
    16         //只能在所在方法区域创建
    17         new InnerClass().execute();
    18     }
    19 }
    复制代码


    在main方法中使用:

    View Code


    4、匿名内部类(anonymous inner classes):

    匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。

    匿名内部类会隐式地继承一个父类或实现一个接口。

    4.1、相关使用例子:

    复制代码
     1 public static void main(String[] args) {
     2     AnonymousInnerClassTest test = new AnonymousInnerClassTest();
     3 
     4     /**
     5  * 创建匿名内部类
     6  * 生成的类名:AnonymousInnerClassTest$1
     7  */
     8     test.print(new Date(){
     9         //重写toString()方法
    10         @Override
    11         public String toString() {
    12             return "Hello world.";
    13         }
    14     });
    15 
    16     JButton button = new JButton();
    17 
    18     /**
    19  * 创建匿名内部类
    20  * 该匿名内部类实现ActionListener接口
    21  * 生成的类名:AnonymousInnerClassTest$1
    22  */
    23     button.addActionListener(new ActionListener(){
    24         //实现接口中的方法
    25         @Override
    26         public void actionPerformed(ActionEvent e) {
    27             System.out.println("使用匿名内部类实现ActionListener接口");
    28         }
    29     });
    30 }
    31 
    32 public void print(Date date){
    33     System.out.println(date);
    34 }
    复制代码
  • 相关阅读:
    3.31考试T2
    P3225 [HNOI2012]矿场搭建
    P2714 四元组统计
    3.29考试T2 变戏法
    开发中可能会用到的几个小tip----QT, pycharm, android, 等
    pycharm下: conda installation is not found ----一个公开的bug的解决方案
    ubuntu16.04 opencv3.4.1 opencv-contribute3.4.1 compile
    vs 2015 update 3各版本下载地址
    在金融业工作了六年,给想入这行的说几个经验
    在centos上安装smplayer播放器
  • 原文地址:https://www.cnblogs.com/happyday56/p/4159516.html
Copyright © 2011-2022 走看看