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 }
    复制代码
  • 相关阅读:
    leetcode5 Longest Palindromic Substring
    leetcode17 Letter Combinations of a Phone Number
    leetcode13 Roman to Integer
    leetcode14 Longest Common Prefix
    leetcode20 Valid Parentheses
    leetcode392 Is Subsequence
    leetcode121 Best Time to Buy and Sell Stock
    leetcode198 House Robber
    leetcode746 Min Cost Climbing Stairs
    tomcat下使用druid配置jnid数据源
  • 原文地址:https://www.cnblogs.com/happyday56/p/4159516.html
Copyright © 2011-2022 走看看