Java内部类和外部类互相访问问题

【3D计算机视觉】从PointNet到PointNet++理论及pytorch代码 从PointNet到PointNet++理论及代码详解1. 点云是什么1.1 三维数据的表现形式1.2 为什么使用点云1.3 点云上以往的相关工作2. PointNet2.1 基于点云的置换不变性2.1.1 由对称函数到PointNet(vanilla)2.1.2 理论证明2.2 基于点云的旋转不变性2.3 网络总体结构2.4 实验结果和网络的鲁棒性2.5 代码解析3. PointNet++3.1... 阅读详情

今天在分析android的AMS的时候,发现在AMS中出现了内部类访问外部类私有方法的操作,一时之间觉得有些奇怪:为毛private的方法可以被访问??之前的认识是private方法是不可以通过对象方式调用的,但是现在的代码确实这么做了!!为什么呢?
带着这个问题,我google了一下,最终找到了这个stackoverflow的帖子:
http://stackoverflow.com/questions/1801718/why-can-outer-java-classes-access-inner-class-private-members
帖子中有很多人给予了热情的回复,大家可以看一下。要说明这个问题,需要说明一下在什么样的情况下使用内部类:
1. 你的某个类中的部分功能需要放在一个单独的类中实现,这样比较有利于代码的可读性和可维护性
2. 但是这部分的功能和现在这个类中的一些方法有这密切的关系。
这个时候,你就应该使用内部类,可以看到,内部类的设计目的就是为了将外部类中的一些功能方便地隔离出来,但是为了方便这个类的操作,所以这个类需要对外部类的一些属性和方法进行访问。也就是说这个时候,内部类只是外部类的一部分和外部类中的某个成员变量没有什么区别,当然可以互相访问了,包括私有属性和方法!这是从设计上对这个问题的解释,从编译和JVM角度来说的话,那就是java在编译的时候内部类和外部类的数据处理是共享的,也就是说所有的数据都是可以互相看到的。
下面给出一个测试代码,实际测试一个内部类和外部类的互相访问的问题:

/*************************************************************************
    > File Name: Demo.java
    > Author: Baniel Gao
    > Mail: createchance@163.com 
    > Created Time: Tue 28 Jun 2016 04:25:01 PM CST
 ************************************************************************/

class OuterClass {

    private int OuterPrivateInt = 0;
    public int OuterPublicInt = 1;

    public OuterClass() {

    }

    private void OuterPrivateMethod() {
        System.out.println("outer private method.");
    }

    public void OuterPublicMethod() {
        System.out.println("outer public method.");
    }

    public void outerTest() {
        System.out.println("***********************Outer Test***********************");

        InnerClass innerObj = new InnerClass();

        // access inner private member
        System.out.println("inner class private int: " + innerObj.InnerPrivateInt);

        // access inner public member
        System.out.println("inner class public int: " + innerObj.InnerPublicInt);

        // call inner public method
        innerObj.InnerPublicMethod();

        // call inner private method
        innerObj.InnerPrivateMethod();

        System.out.println("***********************Outer Test*********************** \n");

        // inner test one
        innerObj.innerTestOne();

        // inner test two
        innerObj.innerTestTwo();
    }

    class InnerClass {

        private int InnerPrivateInt = 2;

        public int InnerPublicInt = 3;

        private void InnerPrivateMethod() {
            System.out.println("inner private method.");
        }

        public void InnerPublicMethod() {
            System.out.println("inner public method.");
        }

        public void innerTestOne() {
            System.out.println("***********************Inner Test One***********************");

            // call outer class private method
            OuterPrivateMethod();

            // call outer class public method
            OuterPublicMethod();

            // access outer class private member
            System.out.println("outer class private int: " + OuterPrivateInt);

            // access outer class public member
            System.out.println("outer class public int: " + OuterPublicInt);

            System.out.println("***********************Inner Test One*********************** \n");
        }

        public void innerTestTwo() {
            System.out.println("***********************Inner Test Two***********************");

            OuterClass outerObj = new OuterClass();

            // access outer class private member
            System.out.println("outer class private int: " + outerObj.OuterPrivateInt);

            // access outer class public member
            System.out.println("outer class public int: " + outerObj.OuterPublicInt);

            // call outer class private method
            outerObj.OuterPrivateMethod();

            // call outer class public method
            outerObj.OuterPublicMethod();

            System.out.println("***********************Inner Test Two***********************");
        }
    }
}
public class Demo {

    public static void main(String[] arg) {
        OuterClass obj = new OuterClass();

        obj.outerTest();
    }

}

运行结果如下:
这里写图片描述
从实际的运行结果来看,内部类和外部类的访问就是通行的,可以自由访问!

ONNX Runtime C# YOLO全链路压测:从300ms到22ms的15个底层优化技巧 摘要:本文分享了工业质检场景下C#调用YOLOv8s ONNX模型的性能优化实战经验。原始单帧推理耗时300ms无法满足产线需求,通过全链路分析定位瓶颈(预处理85ms、推理180ms、后处理30ms)。重点优化措施包括:使用OpenCVSharp CUDA加速预处理(85ms→12ms),开启ONNX Runtime ALL级别图优化,选用TensorRT执行提供程序(180ms→22ms),以及优化内存管理和线程调度。最终实现单帧总耗时22ms±2ms,GPU利用率提升至85%,完整满足产线120块板/ 阅读详情

相关推荐

STM32与FreeRTOS:基于TIM6的高精度系统时间获取实践

本文详细介绍了在STM32与FreeRTOS环境下,基于TIM6定时器实现高精度系统时间获取的实践方法。通过复用FreeRTOS的TIM6硬件资源,开发者可以高效获取毫秒级和微秒级系统时间,同时解决时间溢出和中断处理等关键问题。文章还提供了CubeMX配置技巧、代码实现及性能优化建议,适用于嵌入式系统开发中的精确时间管理需求。

weixin_29169505的博客 357

JAVA基础编程——包和访问控制权限

在C/C++中,是通过.h文件和.cpp文件进行功能区分的,通常一个.cpp文件会对应一个.h文件,而如果不同模块之间需要进行交互操作,或者需要进行接口调用的话,就需要包含对应的.h文件,以表示当前的模块包含了对应模块,因此就可以调用对应模块的接口了。而JAVA中只存在一种.java文件,因此便通过包和包管理实现了这种功能。 在JAVA中,可以将大型的类进行独立,不同功能分别保存到不同的包中,然后将所有包中的程序文件进行编译执行,这样产生的代码便会更易于维护。 包 在JAVA中,源程序文件是.java

止步听风的博客 900

【VisionMaster】图像源模块之本地图像

图像采集之图像源

zhy29563 6961

内部类和外部类之间的相互调用

内部类: ①静态内部类中可以有非静态的方法 ②当内部类中有静态方法或者静态成员变量时,一定是静态内部类 一般内部类在外部类的成员变量位置,像这样: 1 public class Outer { 2 class Inner{ 3 4 } 5 } 1、外部类访问内部类:    内部类被static修饰:可以直接new     Inner i...

大JAVA解决方案 2374

433MHz无线通信避坑指南:如何解决信号干扰和误码问题

本文深入探讨433MHz无线通信中的信号干扰和误码问题,提供从射频前端设计到协议优化的全链路解决方案。通过天线匹配、电源噪声抑制、曼彻斯特编码改进及实时频点切换等技术,显著提升通信稳定性和距离。适合智能家居和工业无线控制系统的开发者参考。

weixin_29288313的博客 417

GoDaddy域名解析 到 阿里云域名DNS

一:登录GODaddy,点击“个人中心”,然后点击“管理域名” 二:域名解析 第一种:直接解析到对应的服务器 添加一个,类型默认A,主机填写二级域名前缀(image.主域名),指向填写目标服务器ip即可(注意目标服务器80端口是否开放) 第二种:将主域名dns转到阿里云域名下 三:若要修给为阿里云解析服务器,要做以下修改,点击“更改” 点击更改后出现如下页面,此时需要到阿里云官网云解析DNS下添加域名解析 四:阿里云添加域名解析...

xiaolinzi176的博客 6705

java 内部类与外部类之间的成员互相访问《java编程思想》

01:内部类 可以访问 外部类 的 任何成员,包括private成员。 02:外部类 访问 内部类 的成员 需要 创建 内部类的 对象,之后 可以 访问 内部类 的 任何 成员,包 括private成员,需要注意的是成员内部类不可以有静态成员。 03:当外部类 的成员 和 内部类的 成员重名时单单用this是区分不了的。在内部类中访问外部类的成员 时可以用如下语法区分 : <外部类类名>.this.<外部类中需要被访问的成员名>; 04:解释 外部类 为什么可以直接访问 内部类的 所

qq_19373729的博客 2579

Google Earth Engine——使用STARFM 图像融合算法将Landsat 和 MODIS 融合得出2000-2023 NDVI长时序图(空间分辨率为 30 米、时间分辨率为 16 天)

非本地入侵物种是全球生态系统面临的主要威胁之一。野葛(Pueraria montana)是一种生长迅速的藤本植物,原产于亚洲,现已入侵美国一些地区,因此该物种的管理成为一个重要问题。利用 Landsat 和 MODIS 平台收集的数据,计算了 2000 年至 2015 年肯塔基州三个侵扰地点的归一化差异植被指数(NDVI)估算值。使用 STARFM 图像融合算法将大地遥感卫星和 MODIS 得出的 NDVI 结合成空间分辨率为 30 米、时间分辨率为 16 天的时间序列。

此星光明博客 2509

内部类和 外部类相互访问

内部类: ①静态内部类中可以有非静态的方法 ②当内部类中有静态方法或者静态成员变量时,一定是静态内部类 1、外部类访问内部类:    内部类被static修饰:可以直接new     Inner in = new Inner();    内部类没有被static修饰:得先new出来外部类的实例,再new内部类的     Inner in = new Outer().n...

weixin_30685029的博客 623

C# 上位机之海康工业相机开发(SDK)实战教程

海康工业相机的C#开发核心是基于MVS SDK的“初始化→枚举→连接→采集→释放”流程,其中图像回调处理和格式转换是关键。严格按照SDK文档处理设备类型(网口/USB)和像素格式;及时释放图像资源,避免内存泄漏;错误码是排查问题的重要依据(可参考SDK中的“错误码说明”文档)。掌握这些基础后,可结合机器视觉算法(如OpenCV)实现缺陷检测、尺寸测量等高级功能,构建完整的工业视觉系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3832

YOLOv11改进策略【小目标改进】| Shape-NWD:融合改进,结合Shape-IoU和NWD 更好地适应小目标特性

Bw−wgt2h−hgt2weight2Bweight2w−wgt​2h−hgt​2​其中weight2weight = 2weight2。

Limiiiing的博客 3053

内部类可以直接访问外部类成员吗_还好面试官还没问,赶紧把【内部类】的知识点补上!...

目录1. 内部类的含义知道内部类这个概念,除了在用链表时定义节点类时,其余情况具体怎么使用感觉很生疏。再次回顾到这个知识点了,做一个系统的总结内部类,从字面意思上理解为 “定义在类内部的类”。可以把它理解为汽车的发动机,只能在汽车的内部使用,给火车它就用不了了;人体的心脏,在人体里面维持着血液循环,拿出来人就凉了。这些 “内部的部件”,是只能够依赖于外部而使用的,我们称这种类为内部类。内部类是依赖...

weixin_35355560的博客 3537

Android Camera MTK框架

Camera简介: 虽然前文说道Android在5.0之后就推出了Camera2 API,但是各个厂家的基本未适配,导致目前市场上大部分机型使用的仍然是Camera1 API。PS:Android 9.0 Google强制要求各个平台厂商(高通/MTK/华为等)支持Camera2,不再兼容Camera1。 ...

weixin_49303682的博客 5507

内部类与外部类之间的访问

目 录 1.内部类与外部类 2.内部类的特点:内部类可以直接访问外部类的成员(成员变量和成员方法),包括私有成员。 3.内部类与外部类之间的访问 在测试类中调用成员内部类中的方法: 外部类访问成员内部类中的成员: 静态的成员内部类,只能访问外部类的静态成员 私有的成员内部类,外界就无法直接创建其对象,可以通过外部类的方法访问 局部内部类,在外界没有直接创建其对象的语法 局部内部类访问外部类的局部变量: 1.内部类与外部类 将一个类A 定义到另一个类B的内部,...

naoguoteng的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【Java基础】一个Java文件可以有多个类(外部类、内部类)

1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以只有非public类,如果只有一个非public类,此类可以跟文件名不同。2、为什么一个java源文件中只能有一个public类?每个编译单元(文件)都只能有一个public类,这表示,每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。public类的名称文件名相同成员内部类。...

qq_43783527的博客 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java内部类、外部类之间访问权限

Java内部类、外部类之间访问权限啥是内部类内部类可以访问外部类的所有成员吗那外部类能访问内部类的所有成员吗静态内部类呢 啥是内部类 顾名思义,内部类就是在一个类中定义了另一个类,比如在类A中定义了一个类B,B就是A的内部类。 class A{ String a = "a"; class B{ String b = "b"; } } 内部类可以访问外部类的所有成员吗 修改一下代码,外部类A中有多种访问权限的字符串,在内部类B中的方法去打印这些字符串,先抛开static来看。 public cl

qq_44381427的博客 5161

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

内部类和外部类之间互相访问

内部类与外部类之间的成员互相访问  内部类可以访问外部类的任何成员,包括private成员。  外部类访问内部类的成员需要创建内部类的对象,之后可以访问内部类的任何成员,包括private成员,需要注意的是成员内部类不可以有静态成员。  当外部类的成员和内部类的成员重名时单单用this是区分不了的。在内部类中访问外部类的成员时可以用如下语法区分  .this.; 1、普通内部类 pac

wangkjs的博客 3404

Java——访问内部类的方法

内部类: 将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。 访问特点: • 内部类可以直接访问外部类中的成员,包括私有成员。 • 而外部类要访问内部类中的成员必须要建立内部类的对象。 内部类的位置: 内部类定义在成员位置上 • 可以被private static成员修饰符修饰。 • 被stati...

caigen0001的专栏 1万+

Java内部类和外部类

Java内部类和外部类 在Java语言中,可以把一个类定义到另外一个类的内部,在类里面的这个类就叫作内部类,外面的类叫作外部类。在这种情况下,这个内部类可以被看成外部类的一个成员(与类的属性和方法类似)。还有一种类被称为顶层(Top-level)类,指的是类定义代码不嵌套在其他类定义中的类。 内部类 内部类主要有四种类型: 静态内部类(Static Inner Class) 成员内部类(Me...

weixin_41924879的博客 2161

Java的外部类和内部类

一、概念 1.1、定义 外部类:这是一个相对内部类的概念,如果一个类中嵌套了另外一个类,我们就把这个类叫做外部类。 内部类:顾名思义,就是定义在里边的那个类。 内部类可以作用在方法里以及外部类里,作用在方法里称为局部内部类,作用在外部类里分为实例内部类和静态内部类。 二、内部类与外部类的互访 2.1、外部类和内部类的类访问修饰符 外部类只有两种访问控制符,即public和default(包...

qq_44543551的博客 2102

外部类与内部类

什么是外部类、内部类 public class Outer { class Inner{ } } 如上述代码,Outer是一个外部类,Inner是一个内部类,内部类也可以用public、static等修饰,但要注意: 1.静态内部类中可以有非静态的方法; 2.当内部类中有静态方法或者静态成员变量时,一定是静态内部类。 外部类与内部类的区别与联系: 内部类可以访问外部类所有的方法和属性,如果内部类和外部类有相同的成员方法和成员属性,内部类的成员方法调用要优先于外部类即内部

Moum_j的博客 5344

[Java]内部类和外部类

外部类,外部类与main方法的联系,内部类,成员内部类,静态内部类,局部内部类,匿名内部类

2302_80281315的博客 1400

Java基础-访问权限、外部类、内部类

修饰符类内部同一包内不同包的子类不同包的非子类private✓✗✗✗default✓✓✗✗protected✓✓✓✗public✓✓✓✓。

Jianshu_Ma的博客 1322

内部类 和外部类之间的访问关系

外部类和内部类的访问 1成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。 2.外部类访问内部类 首先,要有内部类的对象 但是内部类是依附于外部类存在的 所以,先要创建外部类的对象。(方式如下:) 内部类之间的访问: 非静态内部类调用非静态内部类直接调用new类 非静态调用静态 直接调用new类 静态内部类调用静态内部类直接调用new...

qq_35306443的博客 1725

为什么内部类能访问外部类的private成员

此文文转载文 原文链接: https://droidyue.com/blog/2014/10/02/the-private-modifier-in-java/ 这篇文章通过反编译讲解了为什么内部类能用外部类private成员和为什么外部类能用内部类private成员 在Java编程中,使用private关键字修饰了某个成员,只有这个成员所在的类和这个类的方法可以使用,其他的类都无法访问到这个pri...

qq_40940540的博客 6800

Java外部类、内部类、局部内部类访问控制全解析

本文通过学校-班级的类比,解析Java中外部类、成员内部类和局部内部类的访问控制规则。外部类只能使用public或默认修饰符,protected/private会导致编译错误;成员内部类作为外部类的成员,可以灵活使用四种访问修饰符;局部内部类由于作用域限制,不能使用任何访问修饰符。文章通过代码示例验证了不同修饰符的效果,并强调内部类的访问控制本质上是限制外部类之外的代码访问权限,其中private内部类只能通过外部类方法间接访问。

wentorrihi0818的博客 725
上一篇: Android智能指针浅析
下一篇: Android ActivityManagerService(AMS)的启动分析
createchance
博客等级 码龄15年 156粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值