`

内部类 静态内部类 成员内部类 局部内部类 匿名内部类

阅读更多
内部类:

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

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

内部类分为四种:
静态内部类(static inner classes)
成员内部类(member inner classes)
局部内部类(local inner classes)
匿名内部类(anonymous inner classes)
1、静态内部类(static inner classes)

最简单的内部类。

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

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

OuterClass.InnerClass inner = new OuterClass.InnerClass();
1.1、相关使用例子:

静态内部类:

class StaticInner{
    private static int a = 1;

    /**
   * 静态内部类
   * 生成的类名:StaticInner$InnerClass
   */
    public static class InnerClass{
        //静态内部类可以声明静态的成员变量,其他的内部类不可以
        private static int b = 1;
        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;
2.1、相关使用例子:

成员内部类:

class MemberInner{
    private int a = 1;

    public void execute(){
        //在外部类中创建成员内部类
        InnerClass innerClass = this.new InnerClass();
    }

    /**
 * 成员内部类
 */
    public class InnerClass{

        //内部类可以创建与外部类同名的成员变量
        private int a = 2;

        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类型的变量。

3.1、相关使用例子:

局部内部类:

class LocalInner{

    public void execute(){
        final int a = 1;
        /**
 * 创建局部内部类
 */
        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等关键字修饰。

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

4.1、相关使用例子:
public static void main(String[] args) {
    AnonymousInnerClassTest test = new AnonymousInnerClassTest();

    /**
 * 创建匿名内部类
 * 生成的类名:AnonymousInnerClassTest$1
 */
    test.print(new Date(){
        //重写toString()方法
        @Override
        public String toString() {
            return "Hello world.";
        }
    });

    JButton button = new JButton();

    /**
 * 创建匿名内部类
 * 该匿名内部类实现ActionListener接口
 * 生成的类名:AnonymousInnerClassTest$1
 */
    button.addActionListener(new ActionListener(){
        //实现接口中的方法
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("使用匿名内部类实现ActionListener接口");
        }
    });
}

public void print(Date date){
    System.out.println(date);
}
分享到:
评论

相关推荐

    Java的内部类讲解案例代码(成员内部类、局部内部类、匿名内部类、静态内部类、外部类访问四种内部类、其他类访问四种内部类...)

    - 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...

    编程语言-Java语言-关于内部类的分类和认识

    Java语言中的内部类根据定义的位置和访问权限可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类是定义在类的内部且与类的实例相关联的类;局部内部类是定义在方法或作用域内的类;匿名内部...

    内部类的分类及各自用法

    成员内部类、局部内部类、静态内部类、匿名内部类

    java(Day12)---内部类

    匿名内部类 定义的位置:值或实参中 1.2成员内部类 定义位置: 在类中方法以外 语法: 访问权限修饰符 class类名{ } 注意: 成员内部类中不能定义静态代码块,静态属性,静态方法 创建对象的方式: 内部类名 对象名=外部...

    几行代码带你彻底搞懂Java内部类

    内部类基本概述语法格式成员内部类局部内部类匿名内部类静态嵌套类静态嵌套类和非静态嵌套类的区别 内部类 基本概述 当一个类的定义放在另一个类的实体时,则该类叫做内部类,该类所在的类叫做外部类 在一个类体中...

    JAVA常用类与内部类

    4、匿名内部类:特殊的局部内部类,没有类名,只能作为子类出现且只能创建一个对象。 Object类 Object类有什么特点? Object类是所有类的父类(超类,根类,基类),Java中所有类都是Object类的子类 Object类中所...

    深入理解Java?内部类

    内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类  内部类的共性  (1)、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。 ...

    Java中关于内部类来实现计算机毕业设计

    10.9内部类 10.9.1基本介绍 10.9.2基本语法 ...10.9.6匿名内部类的使用(重点) 10.9.7匿名内部类的最佳实践 10.9.8匿名内部类课堂练习 10.9.9成员内部类的使用 10.9.10静态内部类的使用 10.9.11课堂测试题

    java语言--内部类总结

    1,概述 2,分类 3,使用方法分:A,成员内部类 B,局部内部类 C,静态内部类 D,匿名内部类等,讲解详细,附有相应代码,,,

    Java内部类的一些总结

     内部类分为: 成员内部类、局部内部类、静态嵌套类、匿名内部类 。  1.成员内部类  成员内部类是普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:  class Outter {  private int age = 12;...

    正儿八经的详细讲java内部类

    匿名内部类 4.静态内部类 5.内部类的优点 6.内部类的优点 1.成员内部类: (1).定义在类的内部,成员位置上的非静态类 例子: package untl1; public class outer { private static int a = 1; private int b = ...

    【05-面向对象(下)】

    •匿名内部类适合创建那种只需要一次使用的类,定义匿名内部类的语法格式如下: •new 父类构造器(实例列表) |实现接口) •{ • //匿名内部类的 类体部分 •} •匿名内部类不能是抽象类,匿名内部类不能定义...

    Java面向对象的学习(第十篇)

    八、内部类 1.内部类的相关概念 2.内部类的特点 3.内部类的分类 3.1成员内部类: 3.1.1如何在外部获取内部类对象 3.1.2变量名相同的情况 3.2局部内部类 3.3静态内部类 3.4匿名内部类

    跟汤老师学Java(第12季):枚举、泛型、内部类

    本课程从零开始,以通俗易懂的方式讲解Java技术,手把手教你掌握每一个知识点。 真正做到零基础入门学习...9.成员内部类、局部内部类、静态内部类、匿名内部类 教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

    Javaw基础课程笔记.zip

    Java 视频教程目录: day01、Java 语言发展史_JDK的安装_HelloWorld程序的编写_关键字_标识符_基本数据类型。 day02、Java 数据类型转换_...day11:Java final 关键字_内部类_成员内部类_局部内部类_匿名内部类。

    21天学通Java-由浅入深

    245 12.3.3 在外部类外访问静态内部类 246 12.4 匿名内部类 247 12.4.1 创建匿名内部类 247 12.4.2 匿名内部类的初始化 249 12.5 综合练习 250 12.6 小结 250 12.7 习题 250 第13章 多线程(精彩视频:55分钟) 252 ...

    Java面试题.docx

    9、成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用 10、string 转换成 integer的方式及原理 11-20题: 11、哪些情况下的对象会被垃圾回收机制处理掉? 12、静态代理和动态代理的区别...

    安卓java读取网页源码-AndroidLearningNotes:第一次提交

    成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用 谈谈对kotlin的理解 闭包和局部内部类的区别 string 转换成 integer的方式及原理 java深入源码级的面试题(有难度) 哪些情况下的对象会被...

    corejava培训文档

    匿名内部类 7.12. 集合 7.12.1. 集合接口类层次 7.12.2. 集合类层次 7.12.3. 五个最常用的集合类之间的区别和联系 7.12.4. 比较 7.13. 反射 8. 七 异常 8.1. 异常的基本概念 8.2. 捕获异常 8.3. ...

    javaSE代码实例

    15.4.2 基于接口实现的匿名内部类 335 15.4.3 匿名内部类的初始化 337 15.4.4 匿名内部类作用的体现 337 15.5 理解内部类 339 15.6 内部接口 340 15.6.1 定义在类中的内部接口 340 15.6.2 定义在接口中...

Global site tag (gtag.js) - Google Analytics