内部类

Zemax实战:20×超高清变焦镜头设计全流程解析(从架构到制造) 本文详细解析了使用Zemax软件设计一款20倍变焦比、恒定F2.8光圈8K超高清镜头的全流程。从应对恒定光圈、宽光谱与8K解析力三大挑战的初始架构规划,到构建多重组态模型、分七阶段进行像差优化与公差分析,最终跨越制造鸿沟,为广播级影视与高精度工业检测应用提供了实战指南。 阅读详情

一.内部类的定义:

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

二.内部类的分类:

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

首先来说下成员内部类;

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从入门到精通书籍

 

WPS Office JS宏实现文件和数据的上传及下载 WPS Office JS宏下载、上传文件;通过加载项实现数据的获取和上传。 阅读详情

相关推荐

2024最新实战:用1Panel面板+Docker快速部署Frps服务端(含Nginx配置模板)

本文详细介绍了2024年企业级内网穿透方案,通过1Panel面板和Docker技术快速部署Frps服务端,包含Nginx反向代理配置模板。从服务器选型、系统准备到安全加固,提供全栈实战指南,帮助企业和开发者高效实现内网穿透需求。

weixin_27966471的博客 419

内部类(一张图搞定)

shenzixincaiji的博客 1873

CANOE DIVA 工程怎样在具体服务前增加前置条件

然后会在CANoe的Test Module视窗中发现一个跟系统条件相关的Test Module模块,在该模块中有生成跟系统条件相关的CAPL 脚本。这里需要根据你的实际项目进行更改,diva工程加载到canoe的工程的时候,会同步加入你创建的cdd文件,这里示例的ABS_ESP 就是你的cdd的ECU命名,后面就是具体的前置条件服务。4、配置完成后,测试用例就会如下图Trace窗口所示,在每一次10 02请求之前都会调用CAPL Function的PreconditionCheck函数中定义的脚本。

weixin_45940007的博客 1963

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

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

技术菜鸟成长史 858

拼多多/Temu反爬参数逆向踩坑记:从浏览器调试到补环境完整复盘

本文详细解析了拼多多/Temu反爬参数`anti_content`的逆向工程实战,从浏览器调试到补环境完整复盘。通过JavaScript逆向技术,拆解关键函数定位、反混淆算法还原及补环境技术应用,帮助开发者突破电商平台复杂反爬系统,提升数据采集效率。

weixin_33978722的博客 912

淘宝扫码登录避坑指南:如何避免异地登录风控并稳定获取Cookie(附Python代码)

本文深入解析了淘宝扫码登录的风控机制,提供了从环境仿真到代码实现的完整避坑指南。通过精细化伪装请求头、管理会话与IP策略,并附上Python示例代码,帮助开发者稳定获取Cookie,有效避免异地登录风控,实现自动化流程的可靠集成。

l6m7n8的博客 589

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

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

leaf__yang的博客 2万+

华为交换机链路聚合对接思科交换机链路聚合故障

2台华为交换机采用堆叠方式与思科交换机之间使用链路聚合,华为交换机与cisco交换机链路捆绑接口频繁UP/DOWN,业务中断。

网络工程师日常的博客 2116

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

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

liu771626413的博客 4万+

概念解析 | 雷达动态范围

这里存在一个动态范围的问题:强雷达发射信号和弱目标反射信号存在非常大的功率差异,比如传统的脉冲多普勒雷达动态范围可达90dB以上。随着上述技术的发展,预计未来十年雷达接收机动态范围将达到120dB以上,届时雷达的监视能力将得到极大增强。简单来说,雷达动态范围越大,表示接收机噪声越低,对强信号过载保护能力越强,就越能检测到弱信号目标。此外,部分新概念雷达对动态范围提出新的需求,如被动雷达动态范围需大于100dB。当前,随着阵列雷达和数字雷达技术的发展,对雷达接收机动态范围提出了更高要求。

NLOS的博客 1051

【人工智能】大模型可以分为L0层:基础大模型/通用大模型、L1层:行业大模型、L2层:细分场景模型三个层级

大模型确实可以分为L0、L1、L2三个层级,这种分层架构不仅有助于提升模型的泛化能力和适应性,还能更好地满足不同行业和场景的需求。华为盘古大模型的分层架构(L0、L1、L2)在多个证据中得到了详细描述和验证。例如,华为云盘古大模型3.0明确分为L0基础大模型、L1行业大模型和L2场景模型三层架构。此外,其他来源也一致支持这一分层架构,如用友网络的企业服务大模型、智谱AI的GLM-4系列等。

奶爸的编程之路,也就一周冷个三天 3979

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

一、什么是内部类 将一个类定义在一个类或者一个方法里面,这样的类称着内部类 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万+

2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器

12v / 24v智能模拟高侧MOSFET栅极驱动器。2ED2410-EM具有输入CPP和CPN的电压比较器。该比较器可用于基于任何模拟电压触发SAFESTATE模式,甚至是外部电压2ED2410-EM。CPP为比较器的正输入,CPN为负输入。VcPREF可以通过微控制器进行调节,也可以通过板载电源芯片(如英飞凌SBC)或简单的分压器在限制VcP(REF)内进行固定,以保持稳定性。使用此比较器允许2ED2410-EM进入SAFESTATE并独立于微控制器关闭MOSFET。

让学习成为一种习惯 2188

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

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

weixin_44216665的博客 5905

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

green703338130的博客 6713

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

good good study day day up 3398

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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、付费专栏及课程。

余额充值