局部内部类(内部类) - Java

局部内部类

说明:局部内部类是定义在外部类的局部位置,比如方法中,并且有类名。

LocalInnerClass.java

非常重要的几点!!

  1. 局部内部类本质还是一个类,该有的属性方法也都可以有。【举例a.见下文】
  2. 可以直接访问外部类的所有成员(成员=属性+方法),包含私有的。【举例a.见下文】
  3. 不能添加访问修饰符,因为它的地位就是一个局部变量。局部变量是不能使用修饰符的。但是可以使用final修饰,因为局部变量也可以使用final。【举例b.见下文】
  4. 作用域:仅仅在定义它的方法或代码块中。因为它的地位就是一个局部变量。
  5. 局部内部类 —> 访问 —> 外部类的成员 [访问方式:直接访问] 【举例a.】
  6. 外部类 —> 访问 —> 局部内部类的成员
    访问方式:创建对象,再访问(注意:必须在作用域内) 【举例c.】
  7. 外部其他类—不能访问----->局部内部类(因为局部内部类地位是一个局部变量)
  8. 如果外部类和局部内部类的成员重名时,默认遵循就近原则。如果在局部内部类想访问外部类的成员,则可以使用(外部类名.this.成员)去访问【举例d.】

  • 举例
  • a.
class Outer02 {
    private int n1 = 100;
    private void m2() {}
    public void m1() {
    
        class Inner02 { //局部内部类本质还是一个类,该有的方法也都可以有

            public void f1() {
                //直接访问外部类的私有属性
                System.out.println("n1 = " + n1);
                //直接访问外部类的私有方法
                m2();
            }
        }//end Inner02
    }
}//end Outer02 
  • b.

在这里插入图片描述
添加了final之后就不可以继承了:
在这里插入图片描述

  • c.

在这里插入图片描述

//LocalInnerClass.java
public class LocalInnerClass {
    public static void main(String[] args) {
        Outer02 outer02 = new Outer02();
        outer02.m1();
    }
}

class Outer02 {
    private int n1 = 100;
    private void m2() {
        System.out.println("Outer02-m2");
    }
    public void m1() {
        class Inner02 { 
            public void f1() {
                System.out.println("n1 = " + n1);
                m2();
            }
        }
        Inner02 inner02 = new Inner02();
        inner02.f1();
    }//end m1
}//end Outer02 

在这里插入图片描述

  • d.
    其中最重要的是下面两句
    System.out.println("就近原则 n1 = "+n1);
    System.out.println("外部类Outer02的 n1 = "+Outer02.this.n1);
    Outer02.this 本质就是外部类的对象,即哪个对象调用了m1, Outer02.this就是哪个对象。这里通过打印hashCode判断
public class LocalInnerClass {
    public static void main(String[] args) {
        Outer02 outer02 = new Outer02();
        outer02.m1();
        System.out.println("outer02的 hashCode = "+outer02);
    }
}

class Outer02 {
    private int n1 = 100;
    
    public void m1() {
    
        class Inner02 { 
            private int n1 = 800;
            public void f1() {
                System.out.println("就近原则 n1 = "+n1);
                System.out.println("外部类Outer02的 n1 = "+Outer02.this.n1);
                
                System.out.println("Outer02.this的 hashCode = "+Outer02.this);
            }

        }
        Inner02 inner02 = new Inner02();
        inner02.f1();
    }//end m1
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/196159.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

传奇手游白日门【纵横天下】win服务端+双端+GM后台+详细架设教程

搭建资源下载地址:传奇手游白日门【纵横天下】win服务端双端GM后台详细架设教程-海盗空间

C++: String类接口学习

文章目录 STL简介一. 为什么要有string类二. STL 中的 string 类介绍1. string 类描述2. 关于 basic_string 三. string 类的常用接口1. string 类的常见构造2. string 类的容量操作size 和 lengthcapacitymax_sizereserveresize 3. string 类对象的访问及遍历操作operator[] 和…

centos服务器扩容

centos服务器扩容 我的情况是,原服务器是一个80g磁盘,管理员又追加了120G到这块磁盘上,需要把这120G重新追加使用。 请确认你遇到的情况是否和我初始截图一致,再往下看,免得浪费时间与精力 服务器中有120G尚未使用&…

典型的SAST支持检测标准

这里我们列举了Coverity、Cobot、代码卫士、Klocwork、QAC、C test几款典型的SAST工具,看看他们都是支持那些C、C标准(主要是C、C标准,其它语言较少)呢? 这可以作为厂商研发的方向标。 (结束)

更高效的图片预览方案

传统的图片预览方式是什么样子的呢? 首先是用户选择一张图片,通过ajax上传到服务器,然后服务器返回一个访问url 然后给img标签的src属性设置这个访问url。 那这就会有一个问题,用户为什么要先网络上传上去再预览呢,我…

docker容器的生命周期管理常用命令

容器的生命周期管理命令 docker create :创建一个新的容器但不启动它 docker create nginx docker run :创建一个新的容器并运行一个命令 常用选项: 常用选项1. --add-host:容器中hosts文件添加 host:ip 映射记录 2. -a, --attach&#…

银行各类计算公式汇总

一、存款准备金 存款准备金,分为法定存款准备金和超额存款准备金(主要构成是存放央行及现金,不包括存放同业资金)。下表为目前最新的各类银行业金融机构存款准备金水平。 法定存款准备金率是指中央银行规定的,存款性…

python如何抓取携程酒店的价格,让工作更简单点

有时候老板没事安排点事,为了偷懒,只能使出大招,毕竟自己不是那么老老实实干活的人,整理数据这类累和繁琐的活,我怎么能轻易动,好在gpt可以帮我来实现,有人可能会说,这么点内容你还不…

深入理解main方法-Java

深入理解main方法-Java 一、语法说明二、特别说明三、动态传值 一、语法说明 public static void main(String[] args)main方法是虚拟机调用的java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是publicjava虚拟机在执行main()方法时不必创建对象&#x…

djangorestframework modelserializer 处理关系字段

djangorestframework modelserializer 处理关系字段 1.关系 一对一、多对一、多对多 2.drf modelserializer对关系字段的处理 modelserializer默认处理关系字段为PrimaryKeyRelatedField,默认是id-pk。 多对一:直接写入id 多对多:写入id-lis…

科东快讯 | Intewell鸿道工业操作系统亮相丝路峰会暨中国新工业博览会

近日,第十六届中国工业论坛丝路峰会暨中国新工业博览会在陕西西安临空会展中心圆满落幕! 峰会围绕“十四五”工业经济高质量发展的新使命、新担当,以“新工业新动能新格局”为主题,聚焦新兴工业领域,突出新工业产业集…

队列的实现

1.队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头 …

媒介盒子分享:实用软文写作技巧

信息洪流中品牌方如果想要抓住用户注意力就需要一定的技巧,而品牌方写软文时是不是经常面临无法与用户产生共鸣、软文没有转化率的困境。今天媒介盒子就来和大家分享:实用软文写作技巧。 一、 强化优势 人一定是会往自己喜欢的方向走,远离不…

图解系列--Web服务器,Http首部

1.用单台虚拟主机实现多个域名 HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。。比如,提供 Web 托管服务(Web Hosting Service)的供应商,可以用一台服务器为多位客户服务,也可以以每位客户持有的域名运行各自不…

深度视觉目标跟踪进展综述

1 引言 目标跟踪旨在基于初始帧中指定的感兴趣目标( 一般用矩形框表示) ,在后续帧中对该目标进行持续的定位。 基于深度学习的跟踪算法,采用的框架包括相关滤波器、分类式网络、双路网络等。 处理跟踪任务的角度,分为基于匹配思路的双路网…

算法通关第十七关白银挑战——贪心算法的高频算法题

大家好,我是怒码少年小码。 今天早上起来的时候发现我的一篇公众号的文章火了!超级开心!原来这就是有流量支持的底气嘛~ 书接上文,本篇主要讲解贪心思想的几个经典例题。 区间问题 判断区间是否重叠 LeetCode 252&#xff1a…

Leetcode—15.三数之和【中等】

2023每日刷题&#xff08;四十一&#xff09; Leetcode—15.三数之和 实现代码 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(), nums.end());vector<vector<int>> ans;int i, j, k;int s,…

移植NXP官方uboot到IMX6ULL开发板--以及过程中遇到的疑问和错误记录

目录 1 下载uboot源码 2在uboot中添加自己的开发板 2.1 添加开发板默认配置文件 疑问&#xff1a;defconfig文件里面为什么没有CONFIG_SYS_EXTRA_OPTIONS"IMX_CONFIGboard/freescale/mx6ullevk/imximage.cfg,MX6ULL_EVK_EMMC_REWORK" 2.2 添加开发板对应的头文…

k8s中pod的hostport端口突然无法访问故障处理

故障背景&#xff1a; 租户告知生产环境的sftp突然无法访问了&#xff0c;登录环境查看sftp服务运行都是正常的&#xff0c;访问sftp的hostport端口确实不通。 故障处理过程 既然访问不通那就先给服务做个全面检查&#xff0c;看看哪里出了问题&#xff0c;看下sftp日志&#…

VIR-SLAM代码分析2——VIR_VINS详解

前言 VIR-SLAM中VIR_VINS文件夹下是基于VINS-mono的结合UWB传感器的估计器&#xff0c;主要改动的文件在uwb_posegraph&#xff0c;vir_estimator中。其他文件夹完成的是UWB数据的处理问题&#xff0c;比较简单上一节介绍足够&#xff0c;代码也容易看懂。本节介绍的VIR_VINS是…