第十八节(内部类(实例,静态,局部,匿名))

在一个类的内部定义的类,称为内部类

内部类主要分类:

1. 实例内部类

2. 局部内部类

3. 静态内部类

实例内部类 :

1.  创建实例内部类,外部类的实例必须已经创建

2. 实例内部类会持有外部类的引用

3. 实例内部不能定义 static 成员,只能定义实例成员

静态内部类

匿名内部类
/*
    内部类: 实例内部类(成员内部类)

        1. 成员内部类可以等同看做成员变量

        2. 成员内部类中不能有静态声明

        3. 成员内部类可以访问外部类所有的数据

*/
public class OuterClass{

    // 静态变量
    private static String s1 = "Ming";

    // 成员变量
    private String s2 = "keke";

    // 静态方法
    private static void m1(){
        System.out.println("我是静态方法 !");
    }

    // 成员方法
    private void m2(){
        System.out.println("我是成员方法 !");
    }

    // 成员内部类,可以访问控制权限的修饰符修饰
    // public private,protected,缺省
    class InnerClass{

        // 静态方法
        // public static void m3(){}

        public void m4(){
            // 静态的
            System.out.println(s1);
            m1();

            // 成员的
            System.out.println(s2);
            m2();
        }

    }    

    // java入口
    public static void main(String[] args){

        // 创建外部类对象
        OuterClass oc = new OuterClass();

        InnerClass inner = oc.new InnerClass();

        inner.m4();

    }

}
/*
    关于静态内部类

        1. 静态内部类可以等同看做静态变量

        2. 内部类的重要的作用: 可以访问外部类中的私有的属性

        3. 静态内部类可以直接访问外部类的静态数据,无法直接访问成员变量

*/

public class OuterClass{

    // 静态的成员变量
    private static String s1 = "Ming";

    // 成员变量
    private String s2 = "keke";

    // 静态方法
    private static void m1(){
        System.out.println("我是一个静态方法 !");
    } 

    // 成员方法
    private void m2(){
        System.out.println("我是一个成员方法");
    }

    /*
        静态内部类
        可以用访问控制权限的修饰符修饰
        public private,protected,缺省
    */
    static class InnerClass{

        // 静态方法
        public static void m3(){
            System.out.println(s1);
            m1();    

            // 无法直接访问成员变量
            // 成员的
            //System.out.println(s2);
            //m2();    

        }

        // 成员方法
        public void m4(){
            // 静态的
            System.out.println(s1);
            m1();
        }
    }

    public static void main(String[] args){

        // 执行m3()方法
        OuterClass.InnerClass.m3();

        // 执行m4()方法
        InnerClass inner = new OuterClass.InnerClass();
        inner.m4();

    }

}
/*
    内部类: 局部内部类

    等同于局部变量;

    重点:局部内部类在访问局部变量的时候,局部变量必须使用final修饰

*/
public class OuterClass{

    // 方法
    public void m1(){

        // 局部变量
        final int i = 100;

        // 局部内部类是不能访问控制权限修饰符修饰
        class InnerClass{

            // 内部类不能有静态声明
            //public static void m1(){}

            // 成员方法
            public void m2(){
                System.out.println(i);
            }

        }

        // 调用m2
        InnerClass ic = new InnerClass();
        ic.m2();

    }

    // java入口
    public static void main(String[] args){

        OuterClass oc = new OuterClass();
        oc.m1();

    }

}
/*
    匿名内部类:是指 类没有名字

*/

public class Test{

    // 静态方法
    public static void arry(UserService u){
        u.logout();
    }

    public static void main(String[] args){

        // 调用arry方法
        // new UserServiceImpl(){} 这个就是匿名内部类
        //arry(new UserServiceImpl());

        arry(new UserService(){
            public void logout(){
                System.out.println("我要退出系统!");
            }
        });

    }

}

// 定义接口
interface UserService{
    // 退出系统
    void logout();
}

//class UserServiceImpl implements UserService{

//    void logout(){
//        System.out.println("系统以安全退出 !");
//    }

//}
时间: 2025-01-08 06:39:09

第十八节(内部类(实例,静态,局部,匿名))的相关文章

Java笔记十八.内部类和匿名类

内部类和匿名类 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.内部类 1.定义 在一个类内部定义类,即为嵌套类(内部类).有如下几点特点:(1)嵌套类可以直接访问嵌套它的类的成员(变量和方法),包括private成员.但是,嵌套类的成员却不能被嵌套它的类直接访问.(2)内部类使得程序代码更为紧凑,程序更具模块化. 2.内部类实现方法 (1)类中定义和使用一个内部类 在类中直接定义的嵌套类的使用范围,仅限于这个类的内部.内部类的定义和普通

“全栈2019”Java第九十六章:抽象局部内部类详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第九十六章:抽象局部内部类详解 下一章 "全栈2019"Java第九十七章:在方法中访问局部内部类成员详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学

面向对象编程(十六)——内部类详解

一.内部类(innerclasses) 一般情况,我们把类定义成独立的单元.有些情况下,我们把一个类放在另一个类的内部定义,称为内部类. 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类. 1. 内部类的作用 内部类提供了更好的封装,只能让外部类直接访问,不允许同一个包中的其他类直接访问. 内部类可以直接访问外部类的私用属性.内部类被当成其外部类的成员.但是外部类不能访问内部类的

C++静态局部对象

7.5局部对象 在C++语言中,对于每一个变量和对象,都有其各自的作用域和生存期,这两个概念一个是空间的,一个是时间的.对象的作用域指的是该变量的程序文本区,对象的生存期则是程序执行过程中对象存在的时间. 7.5.1自动对象 只有当定义它的函数被调用的时候才存在的对象称为自动对象,自动对象在每次调用函数时创建和销毁. 局部变量所对应的自动对象在函数控制经过变量定义语句时创建.如果在定义时提供了初始化,那么每次创建对象时,对象都会被初始化为指定的初值.对于未初始化的内置类型局部变量,其初值是不确定

“全栈2019”Java第七十六章:静态、非静态内部类访问权限

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第七十六章:静态.非静态内部类访问权限 下一章 "全栈2019"Java第七十七章:抽象内部类与抽象静态内部类详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"J

centos mysql 优化 第十八节课

centos mysql  优化  第十八节课 f

centos shell编程4【分发系统】 第三十八节课

centos shell编程4[分发系统]  第三十八节课 http://www.cnblogs.com/MYSQLZOUQI/p/4811790.htmlmkpasswd 生成密码的工具,安装 expect包 yum install -y expect 上半节课 下半节课 f

第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html 创建自动补全字段 自动补全需要用到一个字段名称为suggest类型为Completion类型的一个字段 所以我们需要用

centos MySQL主从配置 第二十八节课

centos  MySQL主从配置   第二十八节课 上半节课 下半节课 f

第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中

第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详解 基本概念 如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定.链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢.不过世界上还有一种叫作散列表(又叫哈希表,Hash table)的数据结构.它可以通过一