Java基础_内部类:在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。

内部类的主要作用:使用内部类可以减少命名冲突。

定义位置:一个内部类可以定义在一个类中,也可以在一个方法中,甚至在一个表达式中。

广义上讲,内部类分为四种:

静态内部类(static inner classes)

成员内部类(member inner classes)

局部内部类(local inner classes)

匿名内部类(anonymous inner classes)

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

最简单的内部类。

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

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

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

相关使用例子:静态内部类

 class StaticInner{

      private static int a = ;

      /**

 4    * 静态内部类

 5    * 生成的类名:StaticInner$InnerClass

 6    */

      public static class InnerClass{

 8         //静态内部类可以声明静态的成员变量,其他的内部类不可以

         private static int b = ;

         public void execute(){

             //静态内部类只能访问静态程序

             System.out.println(a + b);

         }

     }

 }

//main方法中使用:

 public static void main(String[] args) {

     //创建静态内部类

     StaticInner.InnerClass innerClass = new StaticInner.InnerClass();

     innerClass.execute();

 }

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

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

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

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

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

OuterClass.this.a;

相关使用例子:成员内部类

 class MemberInner{

      private int a = ;

      public void execute(){

          //在外部类中创建成员内部类

          InnerClass innerClass = this.new InnerClass();

      }

      /**

10  * 成员内部类

11  */

     public class InnerClass{

         //内部类可以创建与外部类同名的成员变量

         private int a = ; 

         public void execute(){

             //this引用的是内部类

              System.out.println(this.a);

             //在内部了中使用外部类的成员变量的方法

             System.out.println(MemberInner.this.a);

         }

     }

 }

//在main方法中使用:

 public static void main(String[] args) {

     //创建成员内部类

     MemberInner.InnerClass innerClass = new MemberInner().new InnerClass();

     innerClass.execute();

 }

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

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

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

相关使用例子:局部内部类

  class LocalInner{

      public void execute(){

          final int a = ;

       /**

 6      创建局部内部类

 7      */

          class InnerClass{

              public void execute(){

                 System.out.println("LocalInner Class”);

                 //局部内部类只能访问final类型的变量

                 System.out.println(a);

             }

         }

         //只能在所在方法区域创建

         new InnerClass().execute();

     }

 }

//在main方法中使用:

 public static void main(String[] args) {

     //外部不能直接创建局部内部类

     LocalInner localInner = new LocalInner();

     localInner.execute();

 }

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

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

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

相关使用例子:匿名内部类

  public static void main(String[] args) {

      AnonymousInnerClassTest test = new AnonymousInnerClassTest();

      /**

 5  * 创建匿名内部类

 6  * 生成的类名:AnonymousInnerClassTest$1

 7  */

      test.print(new Date(){

          //重写toString()方法

         @Override

         public String toString() {

             return "Hello world.";

         }

     });

     JButton button = new JButton();

     /**

19  * 创建匿名内部类

20  * 该匿名内部类实现ActionListener接口

21  * 生成的类名:AnonymousInnerClassTest$1

22  */

     button.addActionListener(new ActionListener(){

         //实现接口中的方法

         @Override

         public void actionPerformed(ActionEvent e) {

             System.out.println("使用匿名内部类实现ActionListener接口");

         }

     });

 }

 public void print(Date date){

     System.out.println(date);

 }

Java:内部类(静态内部类、成员内部类、局部内部类、匿名内部类)的更多相关文章

  1. Java 基础 面向对象- 成员内部类/局部内部类/举例Comparable 接口的匿名内部类

    笔记: package 任务135; /**类的 内部类, *1.相当于说, 我们可以在类的内部再定义类, * 2.成员内部类: * a.是外部类的一个成员,4个修饰符:static, final , ...

  2. Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...

  3. Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

    Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...

  4. Java内部类(3):局部内部类

    有这样一种内部类,它是嵌套在方法和作用域内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成 ...

  5. java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类

    提起java内裤类(innerClass)很多人不太熟悉,实际上类似的概念在c++里面也有,那就是嵌套类(Nested Class),关于这俩者的区别,在下文中会有对比.内部类从表面上看,就是在类中定 ...

  6. java中什么是局部内部类Local inner class?

    5.局部内部类Local inner class 马克-to-win:什么叫局部内部类?内部类声明位置:1.它的外部类的范围之内.2.在几个程序块的范围之内.例如,由方法定义的块中或甚至在for循环体 ...

  7. java内部类深入详解 内部类的分类 特点 定义方式 使用

    本文关键词: java内部类 内部类的分类 特点  定义方式 使用   外部类调用内部类 多层嵌套内部类  内部类访问外部类属性  接口中的内部类  内部类的继承  内部类的覆盖  局部内部类 成员内 ...

  8. Java 内部类(成员内部类、局部内部类、静态内部类,匿名内部类)

    一.什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用publ ...

  9. 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类

    内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规 ...

  10. java基础:熟悉3种内部类的写法,重点匿名内部类的使用

    一.内部类定义 内部类(nested classes),面向对象程序设计中,可以在一个类的内部定义另一个类.嵌套类分为两种,即静态嵌套类和非静态嵌套类.静态嵌套类使用很少,最重要的是非静态嵌套类,也即 ...

随机推荐

  1. 学习Linux第六天

    1.Shell编程 bash变量: 都是以字符串格式存储 x=5 等号左右不能有空格,会当作命令处理 如何调用: echo $x 此法无法进行数值运算,不存在的变量输出空 set -u 设置变量报错 ...

  2. 计算器软件的代码实现 (策略模式+asp.net)

    一 策略模式代码的编写 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// ...

  3. git学习,什么是git?

    什么是 Git? 百度百科显示,Git是 Linux 之父 Linus Trovalds,为管理 Linux 内核代码而建立的,被认为是分布式版本控制工具中的顶级水准.智能.友好.强健.高效. 正如所 ...

  4. Ubuntu 部署 Redmine

    我是在虚拟机种安装的Ubuntu,原因是装双系统太麻烦,虚拟机有问题的话删除容易. 首选保证主机中能ping 通虚拟机.我是用的桥接. 1.ubuntu安装必备的软件: sudo apt-get in ...

  5. bzoj 3171 费用流

    每个格拆成两个点,出点连能到的点的入点,如果是箭头指向 方向费用就是0,要不就是1,源点连所有出点,所有入点连 汇点,然后费用流 /********************************** ...

  6. max_flow(Ford-Fulkerson) 分类: ACM TYPE 2014-09-02 01:50 110人阅读 评论(0) 收藏

    #include <cstdio> #include <iostream> #include <cstring> #include<queue> usi ...

  7. Request/Server模式

    Request-------HTTP/SOAP----------Server Request模块只是Client的一小部分,Client还有HTML, Data(Text/JSON/HTML/XML ...

  8. SWF Web播放器

    <HTML> <HEAD> <!-- saved from url=(0013)about:internet --> <TITLE> Untitled. ...

  9. JSP 页面传参和接受参数

    <%@ page language="java" contentType="text/html; charset=GBK" pageEncoding=&q ...

  10. ZOJ3229 Shoot the Bullet(有源汇的上下界最大流)

    #pragma warning(disable:4996) #include <iostream> #include <cstring> #include <string ...