内部类

antdv-<a-form>的使用 是 Ant Design Vue 中用于创建表单的组件,提供了一种结构化的方式来收集用户输入。它支持多种布局、验证、数据绑定等功能,非常适合用于处理用户输入和提交数据。 阅读详情

一.内部类的定义:

如果在一个类中在定义一个类,则将在类中在定义的那个类称为内部类。

二.内部类的分类:

内部类可以分为成员内部类、局部内部类以及匿名内部类、静态内部类。

首先来说下成员内部类;

1.成员内部类:

*成员内部类的语法:

public class OuterClass{        //外部类
       private class InnerClass{//内部类
        //.......
    }
}

在内部类中可以随意使用外部类的成员方法以及成员变量,尽管这些类成员变量被修饰为private。下面有实例代码:

public class outclass{
    private int i=0;    //修饰为private的成员变量
    private void goout(){    //修饰为private的成员方法
        System.out.println("方法执行成功");
    }
    class InnerClass{    //修饰为private的成员变量和方法可以在内部类中随意调用
        void test(){
               goout();
                i++;
        }
    }
}

内部类的实例一定要绑在外部类的实例上,如果从外部类中初始化一个内部类对象,那么内部类对象就会绑定在外部类上对象上。内部类初始化方法与其他类初始化方式相同,都是使用new关键字。 

public class OutClassTest {
InnerClassTest in =new InnerClassTest();
public void out(){
	in.intest();//在外部类方法中通过内部类对象调用内部类方法
}
class InnerClassTest{
	InnerClassTest(){//内部类的构造方法
	}
	public void intest(){}//内部类成员方法
	int i=0;		//定义内部类成员变量
}
public InnerClassTest get(){//外部类方法,返回值为内部类引用
	in.i=5;			//外部类不可以直接访问内部类的成员变量
	return new InnerClassTest();//返回内部类引用
}
public static void main(String []args){
	OutClassTest out = new OutClassTest();
	//内部类的实例化操作必须依靠外部类或者外部类的非静态方法中实现
	System.out.println(out.in);
	OutClassTest.InnerClassTest in=out.get();
	System.out.println(in);
	OutClassTest.InnerClassTest in1=out.new InnerClassTest();
	System.out.println(in1);
}
}

注意:内部类可以访问它的外部类成员,但内部类的成员只有在内部类的范围类是可见的,不能被外部类使用。例如对内部类的成员变量i进行第二次赋值时将会出错,但是可以使用内部类对象引用调用成员变量y。如 new InnerClass().y;

*内部类向上转型为接口

如果将一个权限修饰符为private的内部类向上转型为其父类对象,或者转型为一个接口,在程序中就可以完全隐藏内部类的实现过程。可以外部提供一个接口,在接口中声明一个方法;如果在实现接口的内部类中实现接口的方法,就可以定义多个内部类以不同的方式实现接口的同一个方法。

下面有一个实例,可以同通过创建一个ClassTest测试类,并定义一个接口OutInterfaceTest,让内部类实现接口OutInterfaceTest,最后调用外部类OutClassTest1的doit()方法返回值类型为OutInterfaceTest接口;

public interface OutInterfaceTest {
public void go();
}

public class OutClassTest1 {
//定义一个外部类实现OutInterfaceTest接口
	private class Innerclass1 implements OutInterfaceTest{
		Innerclass1(String s){
			System.out.println(s);
		}

		@Override
		public void go() {
			System.out.println("访问内部类的go()方法");
		}
	}
	public OutInterfaceTest doit(){
		return new Innerclass1("访问内部类构造方法");
	}
}

public class ClassTest {
public static void main(String []args){
	OutClassTest1 out =new OutClassTest1();//实例化一个OutClassTest1对象
	OutInterfaceTest outinter=out.doit();//调用doit(),返回一个OutInterfaceTest接口
	outinter.go();		//调用内部类的f()方法
}
}

输出结果:

由于内部类Innerclass1访问权限为private,除了外部类可以访问外,其他类都不能访问,而可以访问doit()方法,返回一个外部接口类型 ,通过上述代码,将内部类向上转型为接口,创建一个外部类对象,从而访问到私有内部类的f()方法;

注意:非内部类不能被声明为private或protected类型。

*使用this获得内部类与外部类的引用

下面有一个实例,解释了如何在外部类中定义的成员变量与内部类的成员变量相同时,可以使用this关键字进行区分。

class DemoTest {
private int i;
public class test{
	private int i=12;
	public void add(int i){
		i++;//调用形参变量i
		this.i++;//调用内部类变量i
		DemoTest.this.i++;//调用外部类变量i
	}
}
}

在类中如果遇到内部类与外部类同名的成员变量,可以使用this关键字进行区分。

2.局部内部类

内部类不仅可以在类中进行定义,而且还可以定义在类的局部的位置,如在类的方法或者任意的作用域中均可以定义内部类。

下面是一个实例,将内部类定义在外部类的doit()方法的内部;

public interface OutInterfaceTest1 {//定义一个接口

}

public class Demotest1 {
public OutInterfaceTest1 doit(final String s1){
	//在doit方法内部定义一个内部类
	class test implements OutInterfaceTest1{
		test(String s2){
			s2=s1;
			System.out.println(s2);
		}
	}
	return new test("doit");
}
}

从上述实例可以看到内部类被定义到了doit()方法的内部,此时的内部类test是doit()方法体的一部分,并不是Demotest1 类的一部分,所以在doit()的外部不能访问该内部类,但内部类可以访问当前代码块的常量,以及外部类所有的成员。

3.匿名内部类

在doit()方法中将return语句和内部类定义语句合并在一起,下面通过一个实例说明。

在return语句中编写返回值为一个匿名内部类。下面是一个实例;

public interface OutInterfaceTest1 {//定义一个接口

}

public class DemoTest2 {
	public OutInterfaceTest1 doit(){//定义doit()方法
		return new OutInterfaceTest1(){//声明匿名内部类
			private int i=0;
			public int getI(){
				return i;
			}
		};
	}
    public static void main(String []args){
		DemoTest2 demo =new DemoTest2();
		System.out.println();
		OutInterfaceTest1 out=demo.doit();
		System.out.println(out.getClass().getName());
		//System.out.println(demo.doit().getClass().getName());
	}
}

上述所写的代码有点奇怪,是我以前没有接触到的,但是它确实能通过编译。首先是在doit()方法内部的一个引用,然后在retrun语句中插入一个定义内部类的代码,因为这个代码没有名称,所以就把该类称为内部类。实质上这种内部类的作用就是创建一个实现于OutInterfaceTest1接口的内部类的对象。

匿名内部类的实现语法如下:

return new A(){
    //内部类代码
};

A代表类名,由于匿名内部类使用构造方法来生成OutInterface对象。在匿名内部类结束后,需要加分号标识,这个分号并不代表定义内部类结束的标识,而是代表引用表达式结束的标识。

注意:匿名内部类编译以后,或产生以“以外部类名$序号”为名称的.class文件,序号以1~n排列,分别代表1~n个匿名内部类。

例如匿名内部类的实例的输出结果就是以上述方式的结果;

输出结果:

4.静态内部类

定义:在一个内部类前添加修饰符static,这个内部类就变为静态内部类。一个静态内部类中可以声明static成员,但是在非静态内部类中不可以声明静态成员。

静态内部类最大的特点是:不可以使用外部类的非静态成员,所以静态内部类在程序开发中比较少见。可以这么认为,普通内部类对象隐式的在外部保存了一个引用,指向了创建它的外部类对象。

静态内部类的两个特点:

如果创建静态内部类对象,不需要其外部类的对象。  

不能从静态内部类的对象访问非静态外部类的对象;

接下来,定义一个静态内部类,下面是示例代码;

public class DemoTest3 {
int x;
	static class Test{
		void get(){
			//System.out.println(x);  //注意这条输出语句是错误的,不可以在静态内部类中调用外部类的成员变量!!!!!!!
		}
	}
}

注意:上述代码中get()方法中的输出外部类成员变量x的语句是错误的,因为静态内部类中是不能调用外部类的成员变量。

进行程序测试时,如果在每一个java文件都写一个主方法会显示麻烦,因此,我们可以将主方法写入静态内部类中。

下面是一个实例,在静态内部类中定义主方法;

public class DemoTest4 {
	int x=50;
	static class Test{
		void get(){
			System.out.println("get()方法执行成功");
		}
		public static void main(String []args){
			System.out.println("静态类中的主方法");
		}
	}
}

代码编译完成后,会生成一个名称为“外部类名$Test”的独立类和一个StaticInnerTestClass类。

三、内部类的继承

内部类和其他类一样可以被继承,但是继承内部类比继承不同类要复杂一些,需要设置专门的语法来完成它;

下面有一个实例:

public class DemoTest extends Demo.Example{//继承内部类Example
    public DemoTest(Demo d){
        d.super();
    }
}
class Demo{
    class Example{
    }
}

在某各类继承内部类的时,必须硬性给与这个类一个带参数的构造方法,并且该构造方法的参数为需要继承内部类的外部类的引用,同时在构造方法体中使用d.super()语句,这样为继承提供了必要的对象引用;

参考:java从入门到精通书籍

 

PaddleOCRv5训练自己的模型-微调文字识别模型 本文介绍了使用PaddleOCR微调文字识别模型的具体步骤。首先需要按照官方格式准备数据集,包括图片和标注文件。然后进行模型训练,包括环境安装、预训练模型下载、配置文件修改等关键环节,特别针对训练中可能出现的类别数不匹配问题提供了三种解决方案。文章还详细说明了模型导出为静态图格式的方法,以及如何调用训练好的模型进行推理。整个过程涉及多个技术细节,如早停机制设置、断点续训方法等,为需要提升OCR识别精度的开发者提供了实用指导。 阅读详情

相关推荐

一文详解脉搏血氧测量原理与方法

本文摘要:血氧饱和度(SpO2)是评估人体氧合功能的重要指标,反映血红蛋白携氧能力。其测量基于光电容积描记法(PPG),利用红光(660nm)和红外光(940nm)通过组织时的吸收差异计算。脉搏波特征与心血管状态相关,动脉硬化会影响波形特征。Masimo公司的信号提取技术(SET)通过并行算法有效解决了传统血氧仪在运动、弱灌注情况下的测量误差问题,显著提升了临床监测的准确性和可靠性。该技术已成为血氧监测的金标准,在降低误报率、缩短响应时间方面具有显著优势。

m0_50146396的博客 2012

内部类(一张图搞定)

shenzixincaiji的博客 1873

XCKU060光纤卡学习资料保存:基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡

基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡 一、板卡概述 本板卡系我司自主研发,基于XilinxUltraScaleKintex系列FPGAXCKU060-FFVA1156-2-I架构,支持PCIEGen3x8模式的高速信号处理板卡,搭配两路40GQSFP+接口,两组64-bitDDR4,每组容量8Gbyte,可稳定运行在2400MT/s。板卡具有自控上电顺序,BP...

3073

《JAVA从入门到精通》学习笔记10-12章

第10章 接口、继承与多态 1.java中使用extends关键字来标识继承关系。可以在子类的构造方法中使用super()语句调用父类的构造方法,也可以在子类中使用super关键字调用父类的方法,但是子类没有权限调用父类中被修饰为private的方法。在实例化子类对象时,父类无参构造方法将被自动调用,但有参构造方法并不能被自动调用,需用super关键字显示地调用。 2.在JAVA中,java.

技术菜鸟成长史 858

三维重建Fusion中的TSDF算法通俗描述

看个视频 https://www.youtube.com/watch?v=8M_-lSYqACo 这是mobilefusion的视频,大家先了解一下,看到在三维重建的时候外面有个长方体包围盒了吗? 数据准备: 我们不同角度拍摄的RGB图、深度图和相应的pose.txt。 步骤: 1.建立长方体包围盒 要建立一个长方体包围盒。让所有的三维点都在这个长方体里面。 假设z方向垂直相机。 很明显,x,y方...

qq_30339595的博客 1万+

Jetpack Compose Navigation实战:从基础到高级导航模式

本文全面解析Jetpack Compose Navigation在Android开发中的应用,从基础导航实现到高级模式(如单任务/单顶模式),涵盖参数传递、嵌套导航、深层链接等核心功能。通过实战代码示例展示如何优化导航性能,并与ViewModel、Hilt等架构组件整合,为开发者提供高效的Compose导航解决方案。

pz890123456的博客 372

Java内部类详解(含:成员内部类、局部内部类、匿名内部类、静态内部类)

Java内部类详解(含:成员内部类、局部内部类、匿名内部类、静态内部类)

leaf__yang的博客 2万+

阿里云导出的镜像raw转换成vmdk格式工具

阿里云导出的镜像raw转换成vmdk格式工具 1.安装java环境,安装教程不介绍了 2.raw2vmdk软件下载: 在我的链接里面: 3.使用 打开cmd.bat软件: java -jar raw2vmdk.jar (原镜像)C:\\images\\raw\\disk.img (转换的镜像)D:\\images\\vmdk\\disk.vmdk 4.vmware打开vmdk文件 ...

3843

内部类(成员内部类、静态内部类、方法内部类)

一:成员内部类:最常见的内部类就是成员内部类,也称作普通内部类;1、Inner类定义在Outer类的内部,相当于Outer类的成员变量的位置,Inner类可以使用任意访问修饰符,如:public、private、protected等。2、Inner类中定义的test()方法可以访问Outer类中的数据,不受访问控制符的影响。3、定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去......

liu771626413的博客 4万+

手写Socket Web服务器:深入HTTP协议底层原理

HTTP协议是Web通信的基石,其本质是一套严格定义的文本格式与状态交互规范。理解它需回归传输层——TCP连接建立、请求响应格式(如状态行、头/体分隔符\r\n\r\n)、字符编码与字节长度一致性等核心原理。这些知识直接决定CORS拦截、中文乱码、Content-Length错误等高频问题的排查效率。在现代框架封装日益厚重的今天,亲手用Socket实现一个可被Chrome识别的极简Web服务器,成为掌握Web运行机制最有效的实践路径。本文即以DebugLZQ经典案例为蓝本,还原从URI解析、DNS查询、So

weixin_40192258的博客 534

【PyQt】使用PyQt6基于Scenedetect制作视频场景自动分割应用

通过详细介绍PySceneDetect的功能和应用,本文阐释了如何利用这一工具提高视频编辑的效率。我们讨论了安装方法、命令行使用示例以及如何在Python脚本中集成PySceneDetect。此外文章还涵盖了基于PyQt6的图形界面设计,通过多线程技术处理视频,保证界面的响应性,并通过实时反馈机制提升用户体验。无论是专业的视频制作团队还是个人爱好者,PySceneDetect都提供了一种可行的、效率高的场景检测工具,让视频编辑工作变得更加简单快捷。

Mr数据杨 960

什么是内部类?内部类的种类?内部类的作用?

一、什么是内部类 将一个类定义在一个类或者一个方法里面,这样的类称着内部类 https://www.jianshu.com/p/83a50ef23279 https://blog.youkuaiyun.com/lianxu3344/article/details/79473607 https://blog.youkuaiyun.com/flyfeifei66/article/details/82686086 https:...

T-bright的博客 1万+

30分钟用 Restful ABAP Programming(RAP)模型开发一个支持增删改查的 Fiori 应用

2016年时,Jerry曾经写过一系列关于SAP Fiori Smart Template(现在更名为Fiori Elements了)的博客,介绍了所谓的MDD开发方法论 - Metadata Driven Development,即通过开发维护了对应annotation(注解)的CDS view,结合SAP WebIDE,能够花费最少的编程代价,就能够在短时间内获得一个支持增删改查的Fiori应......

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5951

内部类(成员内部类、局部内部类、匿名内部类、静态内部类)

内部类(成员内部类、局部内部类、匿名内部类、静态内部类)

weixin_44216665的博客 5905

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java内部类之成员内部类、局部内部类和匿名内部类

内部类概念 一个类中包含另外一个类。 分类 1、成员内部类。 2、局部内部类(包含匿名内部类)。 成员内部类 定义格式: 修饰符 class 类名称 { 修饰符 class 类名称 { //... } //... } 注意: 内部类使用外部,可以随意访问,但是外部类使用内部类要借助内部类的对象。 使用成员内部类 两种方法: 1...

green703338130的博客 6713

pscad IEEE标准系统搭建说明

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

【Java基础】内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)

Java内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)

good good study day day up 3398

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java 四大内部类总结——局部内部类,匿名内部类,成员内部类,静态内部类

Java 四大内部类总结——局部内部类,匿名内部类,成员内部类,静态内部类

prince0520的博客 3118

内部类(成员内部类+局部内部类+静态内部类+匿名内部类)

内部类的定义:在java中,允许在一个类的内部定义类,称为内部类,这个内部类所在的类称为外部类。内部类定义在外部内的内部,通常只服务于外部类,对于其他外部是不具备可见性的。内部类应用场景:1.当某个类只为一个类提供服务时,可以将这个类定义成内部类 2.可以解决接口或者抽象类不能实例化的问题 成员内部类:在一个类中除了可以定义成员变量,成年方法,还可以定义类,这样的类称为成员内部类。在成员内部类中可以访问外部类的所有成员资源(包括私有成员),例如成员变量

qq_51768153的博客 4361

什么是内部类?内部类的作用

在java语言中,可以把一个类定义到另外一个类的内部,在类里面的这个类就叫内部类,外面的类就叫外部类。 在这情况下,这个内部类可以看做外部类的一个成员。 内部类好处 1.隐藏你不想让别人知道的操作,也即封装性。 public interface Contents { int value(); } public interface Destination { String readLabel...

yy471101598的博客 9669

Java内部类这一篇就够啦,超详细,新人友好(成员内部类、静态内部类、局部内部类和匿名内部类)

详细的介绍成员内部类、静态内部类、局部内部类和匿名内部类,超详细,值得收藏!

shiyuechunfeng的博客 2764

面试 | 什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?

1 内部类的概念 内部类是定义在另一个类中的类;下面类B是类A的内部类。即内部类对象引用了实例化该内部对象的外围类对象。 public class A{ class B {} } 2 为什么需要内部类?(来自JAVA核心技术) 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。 内部类可以对同一个包中的其他类隐藏起来。 当想要定义一个回调函数且不想编写大量代码时,使用匿名内...

星空下的程序猿 3253

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?

一、什么是内部类?or 内部类的概念 内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。 public class TestA{ class TestB {} } 二、 为什么需要内部类?or 内部类有什么作用? 1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。 2、内部类可以对同一个包中的其他类隐藏起来。 3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。 三、 内部类的分类 成员内部

sulixu的博客 3822

内部类与静态内部类

内部类与静态内部类 目录 前言 内部类 1.1 非静态内部类 1.1.1 定义 1.1.2 内部类的特殊语法规则 1.2 静态内部类 回到顶部 前言   如果你是一个急性子,没什么耐性的人,可以只看下句,自己去品味理解:   内部类:就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我。(所以内部类对象是以外部类对象存在为前提的)   静态内部类:就是我跟你没关系,自己可以完全独立存在,但是我就借你的壳用一下,来隐藏自己。   如果还不知道静态和普通成员..

qq_40826814的博客 2984

Java 内部类 ==> 成员内部类(非静态内部类、静态内部类)、匿名内部类、局部内部类

一般情况,我们把类定义成独立的单元。有些情况下,我们把一个类放在另一个类的内部定义,称为内部类(innerclasses)。 内部类可以使用public、default、protected 、private以及static修饰。而外部顶级类(我们以前接触的类)只能使用public和default修饰。 注意 内部类只是一个编译时概念,一旦我们编译成功,就会成为完全不...

郑德帅 7448

java内部类之私有内部类、局部内部类、匿名内部类

一、私有内部类: class Out { private int age = 12; private class In { public void print() { System.out.println(age); } } public void outPrint() { new

gongpulin的博客 1万+

java内部类之成员内部类、静态内部类

内部类其实就是一个类中还包含着另外一个类 如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动)显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类,而心脏又在人体当中,正如同是内部类在外部内当中 广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部

gongpulin的博客 4367
上一篇: java自定义异常以及throw和throws关键字
下一篇: java的Object类理解和接口的定义
coder150806
博客等级 码龄8年 79粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值