内部类全面了解

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(使用前将#替换为@)

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

随机推荐

  • 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 在类的局部位置