内部类全面了解

2023-10-26

格式: 
public class A类{
   修饰符 class B类{
   }
   }

  注意点:
  1.内部类可以直接访问外部类成员,包括私有
  2.外部类要访问内部类成员必须要创建对象


根据内部类在类中定义的位置,分为:
1.在类的成员位置:成员内部类
2.在类的局部位置:局部内部类


成员内部类
成员内部类,外界如何创建对象使用:
格式:
    外部类名.内部类名 对象名=外部类对象.内部类对象;
    范例:Outer.lnner oi =new Outer().new lnner();

实例:

public class OuterClass {
	innerClass in = new innerClass(); // 在外部类实例化内部类对象引用
	
	public void ouf() {
		in.inf(); // 在外部类方法中调用内部类方法
	}
	
	class innerClass {
		innerClass() { // 内部类构造方法
		}
		
		public void inf() { // 内部类成员方法
		}
		
		int y = 0; // 定义内部类成员变量
	}
	
	public innerClass doit() { // 外部类方法,返回值为内部类引用
		// y=4; //外部类不可以直接访问内部类成员变量
		in.y = 4;
		return new innerClass(); // 返回内部类引用
	}
	
	public static void main(String args[]) {
		OuterClass out = new OuterClass();
		// 内部类的对象实例化操作必须在外部类或外部类中的非静态方法中实现
		OuterClass.innerClass in = out.doit();
		OuterClass.innerClass in2 = out.new innerClass();
	}
}
public class text内部类 {
    public static void main(String[] args) {
        outerclass.innerclass oi=out.new innerclass();
    }

}

内部类向上转型为接口
 

package com.lzw;

interface OutInterface { // 定义一个接口
    public void f();
}

public class InterfaceInner {
    public static void main(String args[]) {
        OuterClass2 out = new OuterClass2(); // 实例化一个OuterClass2对象
        // 调用doit()方法,返回一个OutInterface接口
        OutInterface outinter = out.doit();
        outinter.f(); // 调用f()方法
    }
}

class OuterClass2 {
    // 定义一个内部类实现OutInterface接口
    private class InnerClass implements OutInterface {
        InnerClass(String s) { // 内部类构造方法
            System.out.println(s);
        }
        
        public void f() { // 实现接口中的f()方法
            System.out.println("访问内部类中的f()方法");
        }
    }
    
    public OutInterface doit() { // 定义一个方法,返回值类型为OutInterface接口
        return new InnerClass("访问内部类构造方法");
    }
}

使用this关键字获取内部类与外部类的引用

public class TheSameName {
	private int x;
	
	private class Inner {
		private int x = 9;
		public void doit(int x) {
			x++; // 调用的是形参x
			this.x++; // 调用内部类的变量x
			TheSameName.this.x++; // 调用外部类的变量x
		}
	}
}

局部内部类

public class text12 {
    private int num =1250;
    public void method(){
        class inner{
        public void show(){
            System.out.println(num);
        }}
        inner i=new inner();
        i.show();
    }
}
public class text内部类 {
    public static void main(String[] args) {
      text12 io=new text12();
      io.method();
    }
}
局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用该类可以直接访问外部类成员,也可以访问方法内的局部变量

匿名内部类(归属于局部内部类)

前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类
new 类名或者接口(){
};
范例:
new inter(){
    public void show(){
    }
}
本质:
    是一个继承了该类或者实现了该接口的子类匿名对象
public interface inter {
    void show();
}
public class text12 {
    public void method(){
        new inter(){
        public void show(){
            System.out.println("这是一个匿名内部类");
        }
        }.show();
    }
}
//也可以是
public class text12 {
    public void method(){
        inter i=new inter(){
        public void show(){
            System.out.println("这是一个匿名内部类");
        }
        }
    i.show();
    }
}
public class text内部类 {
    public static void main(String[] args) {
      text12 io=new text12();
      io.method();
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内部类全面了解 的相关文章

  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • org.apache.sling.api.resource,version=[2.3,3) -- 无法解析

    您好 我无法访问我的项目内容 我已经上传了从 CQ 访问内容所需的所有包 我唯一能看到的是 org apache sling api resource version 2 3 3 无法解析 这是否是异常的原因 如果是 请告诉我如何解决 中Q
  • OpenCV 中的 Gabor 内核参数

    我必须在我的应用程序中使用 Gabor 过滤器 但我不知道这个 OpenCV 方法参数值 我想对虹膜进行编码 启动 Gabor 过滤器并获取特征 我想对 12 组 Gabor 参数值执行此操作 然后我想计算 Hamming Dystans
  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • OSGi:如果不取消服务会发生什么

    这是我获取 OSGi 服务的方式 ServiceReference reference bundleContext getServiceReference Foo class getName Foo foo Foo bundleContex
  • 如何模拟从抽象类继承的受保护子类方法?

    如何使用 Mockito 或 PowerMock 模拟由子类实现但从抽象超类继承的受保护方法 换句话说 我想在模拟 doSomethingElse 的同时测试 doSomething 方法 抽象超类 public abstract clas
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • 具有 java XSLT 扩展的数组

    我正在尝试使用 java 在 XSLT 扩展中使用数组 我收到以下错误 Caused by java lang ClassCastException org apache xpath objects XObject cannot be ca
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • 将 Azure AD 高级自定义角色与 Spring Security 结合使用以进行基于角色的访问

    我创建了一个演示 Spring Boot 应用程序 我想在其中使用 AD 身份验证和授权 并使用 AD 和 Spring Security 查看 Azure 文档 我执行了以下操作 package com myapp contactdb c
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • 如何从 Maven 存储库引用本机 DLL?

    如果 JAR 附带 Maven 存储库中的本机 DLL 我需要在 pom xml 中放入什么才能将该 DLL 放入打包中 更具体地举个例子Jacob http search maven org artifactdetails 7Cnet s
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个

随机推荐

  • 01.Vuepress2.x 创建自己的技术文档站

    目录 一 简介 二 安装 三 配置 四 启动 五 效果图 六 编译 一 简介 Vuepress2 x 英文官网 Vuepress2 x 中文官网 二 安装 参考 步骤1 新建一个文件夹 如 Doc2 0 步骤2 进入文件夹目录 新建 pac
  • Anaconda对python环境管理常用命令

    创建环境 n 为指定环境名称 python 未指定python的版本 conda create n env name python 3 6 删除环境 conda remove n env name all 删除环境的包 conda remo
  • LordOfTheRoot_1.0.1靶机入侵

    LordOfTheRoot 1 0 1靶机入侵 1 环境搭建 下载地址 https www vulnhub com entry lord of the root 101 129 下载后用 VMware 或者 VirtualBox 打开 并配
  • ocr文字识别环境部署

    一 Linux环境下部署1 环境要求操作系统 CenterOS7 主要软件环境 python3 9X64 opencv4 5 5 PaddleOCR2 5 paddlepaddle2 2 1 python运行环境建议3 6 3 91 环境安
  • 初级学习01

    打开cmd的方式 1 管理员方式进行 2 Win R 输入cmd 3 在任意文件夹下面 shift 鼠标右键 4 资源管理器的地址栏前 cmd路径 常用的Dos命令 1 盘符切换 C D F 2 查看当前目录下的所有文件 dir 3 切换目
  • ionic2 打包android包时报'C:\Users\Administrator\AppData\Local\Android\sdk' does not exist.

    写在前面 为了能及时的将自己踩到的前端坑 包括ionic angular ReactNative 小程序 APICloud 分享给大家 以后会逐渐将文章转移到微信公众号 前端e家 front e family 可直接扫码关注 公众号会不定期
  • 解析@EnableWebMvc 、WebMvcConfigurationSupport和WebMvcConfigurationAdapter

    在spring boot spring mvc 的项目中 有些时候我们需要自己配置一些项目的设置 就会涉及到这三个 那么 他们之间有什么关系呢 首先 EnableWebMvc WebMvcConfigurationSupport 使用了 E
  • 设置button的边框颜色和宽度

    UIButton button UIButton buttonWithType UIButtonTypeCustom button frame CGRectMake 100 100 100 100 button layer cornerRa
  • Flutter图片选择 image_picker(官方)插件使用详解

    Flutter图片选择 image picker 官方 插件使用详解 IOS自测 image picker GitHub最新版本查看 https github com flutter plugins 下滑找到image picker可以看到
  • apipost-一键压测

    apipost新功能可实现一键压测 接口压测实践 使用场景 对指定接口进行性能测试 实现方式 为实现高性能的并发需求 使用自研的压测引擎 可以实现一万以上并发 项目已经开源 github地址 https github com Apipost
  • STM32 GPIO: pull up, pull down, no pull

    gpio 有3种状态 上拉 下拉 不拉 首先 确定GPIO口的输入和输出 当GPIO处于output模式 一般选择no pull 引脚能够正确地输出目标值 当GPIO处于input模式 需要根据默认的输入值来确定配置模式 如果默认输入的值为
  • C语言小游戏——推箱子(一次性版本)

    目录 思路 1 游戏的开始和地图设定 2 地图场景设置和人物的四项移动 3 分析人物的移动 4 判断结束条件 思路 l 分析 编写代码实现 控制游戏角色 在地图上 避开障碍物 将箱子推到目标点 游戏元素 角色 控制移动 地图 游戏场所 空地
  • JavaScript 的初识

    JavaScript 是 Web 的编程语言 是一种轻量级的编程语言 是可插入 HTML 页面的编程代码 插入 HTML 页面后 可由所有的现代浏览器执行 且JavaScript 非常容易学 文章目录 一 认识JavaScript 二 Ja
  • Git基本命令使用

    Git基本命令使用 分支操作 显示所有本地分支 git branch 显示所有远程分支 git branch r 新建一个分支 git branch branch name 切换到指定的分支 git checkout b branch na
  • Spring框架——IOC和AOP以及DI

    一 IOC原理 1 控制反转 IOC 将创建管理对象的工作交给容器来做 在容器初始化 或在某个时间节点 通过反射机制创建好对象 在使用时直接从容器中获取 控制反转 将对象的控制权反过来交给容器管理 依赖注入 DI 将对象依赖写入配置文件 在
  • Python实现基本Socket服务端与客户端通信

    该文章使用 python 实现基本的 socket 服务端与客户端通信 分步详解与完整代码都有 按需所求即可 一 服务端代码 1 引入自带的socket模块 并创建一个socket实例 服务端需要使用 bind 将该实例绑定到指定域名与端口
  • WDK李宏毅学习笔记第十二周01_ELMO,BERT,GPT

    ELMO BERT GPT 文章目录 ELMO BERT GPT 摘要 1 Contextualized Word Embedding 2 Embeddings from Language Model ELMO 3 Bidirectiona
  • 入门PyTorch的学习路线指南

    PyTorch是目前最受欢迎的深度学习框架之一 它具有易于使用 灵活性强 支持动态图等优点 因此备受研究者和工程师的青睐 如果你想学习PyTorch 下面是一个入门PyTorch的学习路线 学习基础知识 学习Python编程语言 PyTor
  • GD32F450 通过i2c 总线上写指令,从机mcp3421 没有应答信号ACK

    没有ACK的原因 mcp3421地址配置错了 丝印型号是CB5R 地址应该是001 而不是默认的000 MCP3421 ADC单通道模数转换器 中文规格书下载链接 https bbs elecfans com jishu 2245219 1
  • 内部类全面了解

    格式 public class A类 修饰符 class B类 注意点 1 内部类可以直接访问外部类成员 包括私有 2 外部类要访问内部类成员必须要创建对象根据内部类在类中定义的位置 分为 1 在类的成员位置 成员内部类 2 在类的局部位置