前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【14】JAVASE-面向对象-内部类【从零开始学JAVA】

【14】JAVASE-面向对象-内部类【从零开始学JAVA】

作者头像
用户4919348
发布于 2024-05-25 06:04:55
发布于 2024-05-25 06:04:55
8400
代码可运行
举报
文章被收录于专栏:波波烤鸭波波烤鸭
运行总次数:0
代码可运行

Java零基础系列课程-JavaSE基础篇

Lecture:波哥

Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机Java 仍是企业和开发人员的首选开发平台。

八、 内部类

1.内部类的相关概念

​ 将类定义在类的内部,那么该类就称为内部类

注意:内部类是一个相对的概念,如果Outter类中有一个类Inner类,那么Otter类相对于Inner类来说就外部类,而Inner相对于Outter来说就是内部类

Java中不能被实例化的类型有哪些?

  1. 抽象类
  2. 接口
  3. 所有的构造方法都被private修饰的类型
  4. 内部类不能被外界直接实例化

为什么要使用内部类?

提高类的安全性

2. 内部类的特点

  1. 内部类可以直接访问外部类的所有的成员(变量和方法)
  2. 外部类如果要访问内部类成员,必须创建内部类对象来实现
  3. 内部类编译后的class文件命名有别于普通类:外部类
内部类.class Outter

Inner.class

  1. 要访问内部类的成员是非常麻烦的,而且造成程序耦合性增强,可读性降低,所以内部类慎用

3.内部类的分类

3.1 成员内部类

我们在外部类中定义一个成员内部类,这个内部类和成员变量成员方法是同级的

3.1.1 如何在外部获取内部类对象

内部类非私有

​ 因为内部类非私有,所以我们可以通过如下的格式直接获取内部类的对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
外部类.内部类 变量名称 = 外部类对象.内部类对象;

内部类私有

​ 内部类作为外部类的成员,那么是可以用 private 来修饰的,既然用 private修饰那也就意味着外界是没办法直接获取该对象的,同时我们也没法通过相关的类型来接收,但是我们可以在外部类中提供相关的getter/setter方法来处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.bobo.oop12;

public class OOPDemo01 {

	public static void main(String[] args) {
		// 我们在外部如何获取内部类的对象
		/*Outter.Inner in = new Outter().new Inner();
		in.show();*/
		
		Outter out = new Outter();
		System.out.println(out.getName());
		
		out.setInner();
		System.out.println(out.getInner());
		// 可以获取内部类对象  但是没法用变量来接收,没法访问相关的属性和方法
		out.getInner();
	}

}

class Outter{
	
	private String name = "张三";
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	/**
	 * 这个内部类是外部类的一个成员
	 * @author dpb
	 *
	 */
	private class Inner{
		
		public void show(){
			System.out.println("show ... " + name);
		}
	}
	
	public void setInner(){
		Inner in = new Inner();
		in.show();
	}
	
	public Inner getInner(){
		Inner in = new Inner();
		return in;
	}
	
	void info(){
		
	}
	
	
}
3.1.2 变量名相同的情况

当外部类成员变量和内部类成员变量及内部类方法中的局部变量同名的情况下怎么处理

在这种情况下获取外部类中的成员变量的方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
外部类名.this.变量名
3.2 局部内部类

成员内部类我可以理解为和成员变量同级,那么局部内部类我们也可以理解为和局部变量同级的内部类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.bobo.oop13;

public class OOPDemo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Outter02 out = new Outter02();
		out.show();
	}

}

class Outter02{
	
	int num1 = 20;
	
	/**
	 * 在JDK1.8之后 把局部内部类中使用的外部方法的局部变量默认的提升为 final
	 * 在JDK1.8之前 这里会强制要求我们将 局部变量声明为final类型
	 */
	public void show(){
		 int num  = 30;
		
		// 定义一个局部内部类
		class Inner{
			public void info(){
				System.out.println("inner info ..." + num);
			}
		}
		// 我们要使用内部类对象 调用其中的方法才会执行
		Inner in = new Inner();
		// num = 50;
		in.info();
		System.out.println(num);
	}
}
3.3 静态内部类

​ 被static修饰的成员内部类我们称为静态内部类。

获取内部类实例的语法格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
外部类.内部类 变量名称 = new 外部类.内部类();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.bobo.oop14;

public class OOPDemo01 {

	public static void main(String[] args) {
		// 1.获取外部内对象
		Outter out = new Outter();
		//out.show();
		// 2.获取静态内部类对象
		// Outter.Inner in = new Outter().new Inner();
		// Outter.Inner in = Outter.(new Inner());
		Outter.Inner in = new Outter.Inner();
		Outter.name = "";
		Outter.show();

	}

}

class Outter{
	
	public static String name = "张三";
	
	public static void show(){
		System.out.println(name);
	}
	
	/**
	 * 定义的一个静态内部类
	 * @author dpb
	 *
	 */
	static class Inner{
		public static String name="李四";
		
		public int age = 20;
		
		public void info1(){
			System.out.println(age);
		}
		
		public static void info2(){
			System.out.println("内部类:" + name);
		}
	}
	
}

静态内部类相比于成员内部类来说简化了方法方式,好处同样的提高了类型的安全性。

静态内部类的特点:

  1. 本身还是一个class,所以内部成员和普通类没区别
  2. 静态内部类不能获取外部类中的非静态的属性和方法
  3. 在外部内中要获取内部类对象直接实例化即可

如果要获取静态内部类中的静态方法或者属性的话可以通过如下方式获取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
外部类名称.内部类名称.静态方法();
外部类名称.内部类名称.静态变量;
3.4 匿名内部类

没有名称的内部类我们称为匿名内部类。如果一个内部类在整个操作中只使用了一次的话,那就可以定义为匿名内部类。

没有使用匿名内部类的情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.bobo.oop15;

public class OOPDemo01 {

	public static void main(String[] args) {
		new X().fun2();

	}

}

interface Person{
	void sleep();
}

class User implements Person{

	@Override
	public void sleep() {
		System.out.println("睡觉真舒服啊....");
		
	}
	
}

class X {
	void fun1(Person p){
		p.sleep();
	}
	
	void fun2(){
		this.fun1(new User());
	}
}

使用匿名内部类的情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.bobo.oop16;

public class OOPDemo01 {

	public static void main(String[] args) {
		new X().fun2();

	}

}

interface Person{
	void sleep();
}

/*class User implements Person{

	@Override
	public void sleep() {
		System.out.println("睡觉真舒服啊....");
		
	}
	
}*/

class X {
	void fun1(Person p){
		p.sleep();
	}
	
	void fun2(){
		this.fun1(new Person(){

			@Override
			public void sleep() {
				System.out.println("AAAAAA....");
			}
			
		});
	}
}

匿名内部是Java为了方便我们编写程序而设计的一种机制,因为有时候有的内部类之需要创建一个对象就可以了,这时候匿名内部类就比较合适好,匿名内部类一般都是和接口及抽象类关联的

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
秒懂!DeepSeek提示词手册
DeepSeek在处理复杂任务时,通过结构化提示词提高输出质量的方法主要体现在以下几个方面:
疯狂的KK
2025/02/06
4.5K0
秒懂!DeepSeek提示词手册
10个 DeepSeek 神级提示词,建议收藏!
在当下人工智能飞速发展的时代,DeepSeek 作为一款功能强大的 AI 工具,能够帮助我们实现各种创意和需求。然而,要充分发挥它的潜力,掌握一些巧妙的提示词至关重要。今天,就为大家精心整理了 15 个 DeepSeek 神级提示词,涵盖多个领域,赶紧收藏起来,让你的 AI 运用如虎添翼!
测试开发技术
2025/04/23
3080
10个 DeepSeek 神级提示词,建议收藏!
23个超强的DeepSeek提示词指令,一看就懂
给大家分享几个超强的DeepSeek提示词,大家也可以模仿提示词的结构去书写自己需要的DeepSeek指令。
SQL数据库开发
2025/03/03
3660
23个超强的DeepSeek提示词指令,一看就懂
50个常用的DeepSeek提问公式
"每当我打开DeepSeek,总感觉无从下手,不知道该如何提问才能得到真正有用的回答..."
一臻AI
2025/04/27
1410
50个常用的DeepSeek提问公式
AI干货:50个DeepSeek提示词实战指南(2025终极版)
根据DeepSeek最新用户调研显示,83%的职场人已尝试AI工具,但仅12%能系统化运用其能力。问题核心在于:多数人仍在用“搜索引擎思维”使用AI。本文基于1000+真实用户案例提炼,通过50个结构化提示词模板,手把手教你解锁DeepSeek的进阶用法。
小明互联网技术分享社区
2025/03/24
1.1K0
AI干货:50个DeepSeek提示词实战指南(2025终极版)
【愚公系列】《高效使用DeepSeek》005-DeepSeek的对话技巧
在AI工具百花齐放的今天,对话能力早已超越“能说会道”的浅层定义。DeepSeek凭借其独特的场景化对话架构与多模态认知引擎,正在重新定义人机交互的边界——它不仅能理解你“说了什么”,更能感知你“为何而说”。无论是专业领域的深度探讨,还是日常沟通的幽默调侃,这台“最懂中国人的AI”正以惊人的进化速度,让技术对话回归人性温度。
愚公搬代码
2025/03/18
1800
【AGI-Eval学习干货 NO.2】DeepSeek小白必看指南,隐藏1000个提示词参考(建议收藏)
这个热搜#博主卖 DeepSeek 相关课程 1 天收入 50000#,我看到之后感觉得做一期干货内容,DeepSeek 的玩法现在都在摸索阶段,和大家一起学习探索。
AGI-Eval评测社区
2025/03/14
1740
【AGI-Eval学习干货 NO.2】DeepSeek小白必看指南,隐藏1000个提示词参考(建议收藏)
收藏破10w的教程!用DeepSeek做可视化:5个案例搞定工作汇报/论文/自媒体,一键生成(保姆级喂饭,附全套模板)
DeepSeek作为今年爆火的AI工具,已经被广泛用于各种办公或自媒体写作创作场景,比如可以用DeepSeek辅助帮我们生成各种代码,如Python、Java、SQL、JavaScript、HTML等,你可以拿这些代码放到编译器里,就能直接跑出结果,比如机器学习算法、exe应用、可视化图表看板、web应用、海报图片等。
测试开发技术
2025/04/10
3930
收藏破10w的教程!用DeepSeek做可视化:5个案例搞定工作汇报/论文/自媒体,一键生成(保姆级喂饭,附全套模板)
DeepSeek 入门指导手册——从入门到精通【3】
🌟 通过这些步骤,您可以高效地构建和管理自己的私人知识库,无论是法律判例、医疗手册还是产品知识,都能轻松整理和调用!
@派大星
2025/02/26
1951
DeepSeek 入门指导手册——从入门到精通【3】
Deepseek52条喂饭指令
- 指令:以[身份]的口吻,写一篇[产品]的种草笔记,突出5个使用场景和3个痛点解决方案。
程序员皮皮林
2025/02/09
1840
DeepSeek提示词工程完全指南:如何用「思维翻译器」激发大模型潜能——附官方提示词和优化案例
之前写了一篇DeepSeek-R1 技术全景解析:从原理到实践的“炼金术配方” ——附多阶段训练流程图与核心误区澄清,粗略将了一下DeepSeek的前世今生和原理,数据反馈还可以说明是对大家有帮助,那今天再结合DS官方提示词和之前学的prompt心法来和大家分享一下如何写好DS提示词充分利用好DeepSeek
LeonAlgo
2025/02/26
5160
DeepSeek提示词工程完全指南:如何用「思维翻译器」激发大模型潜能——附官方提示词和优化案例
全网最全Doris+DeepSeek使用手册(客服/图表/PPT/贺岁诗)!学会了Doris熟练度提高90%【建议收藏】
❝2025注定是不凡的一年。 DeepSeek火爆出圈出国,即使春节期间,各位海内外的博主们也在马不停蹄地猛更,流量被疯狂放大! 一臻刚耍完,正巧赶上个节尾,就有不少臻友私信问 "有没有Doris+DeepSeek的玩法?" "好滴,安排!" 吭呲吭呲马不停蹄地翻阅了大大小小的DeepSeek爆文,实测总结了一些Doris+DeepSeek的玩法思路,欢迎大家一起来探究竟!
一臻数据
2025/02/05
6381
全网最全Doris+DeepSeek使用手册(客服/图表/PPT/贺岁诗)!学会了Doris熟练度提高90%【建议收藏】
13个DeepSeek官方提示词完整版
为方便大家随时查阅,岳哥特地帮大家整理成了PDF电子书,有需要的小伙伴,可在公众号后台回复:DeepSeek提示词
SQL数据库开发
2025/02/28
1.3K0
13个DeepSeek官方提示词完整版
DeepSeek回答过于笼统,提示词如何优化
用户2755790
2025/04/25
1850
DeepSeek 入门指导手册——从入门到精通【2】
🌟 通过这些步骤,您可以高效地完成学术论文的全流程,从开题到答辩,每一步都轻松应对!
@派大星
2025/02/25
2230
DeepSeek 新手使用指南:入门必备技巧与隐藏功能(建议收藏)
2025年春节过的好快,转眼间,大家又回到了各自工作岗位了,要说这个春节,什么最火,肯定绕不开DeepSeek。
测试开发技术
2025/02/10
1.9K0
DeepSeek 新手使用指南:入门必备技巧与隐藏功能(建议收藏)
干货!3个案例教你使用DeepSeek制作可视化图表,相当酷炫
DeepSeek作为生产力爆棚的AI工具,已经被用于各种办公场景,作为平时接触数据比较多的我来说,它其实是一个数据可视化的利器,能自主制作各种数据可视化图表,而且颜值还非常高。
派大星的数据屋
2025/03/17
7100
干货!3个案例教你使用DeepSeek制作可视化图表,相当酷炫
人工智能入门与高效使用DeepSeek的提示词指南
本文将分享一些使用 AI 和 DeepSeek 的技巧,帮助你更好地利用这些工具,提高效率。
星哥玩云
2025/03/03
2151
人工智能入门与高效使用DeepSeek的提示词指南
DeepSeek职场小白工作周报写作指南:三步打造高效汇报
在职场中,工作周报不仅是工作成果的展示窗口,更是个人职业形象的重要名片。对于初入职场的新人而言,如何用DeepSeek快速生成逻辑清晰、重点突出的周报?
小明互联网技术分享社区
2025/05/01
2150
DeepSeek职场小白工作周报写作指南:三步打造高效汇报
用DeepSeek备课、批作业全攻略,教学效率翻倍!
本文手把手教你如何用DeepSeek高效备课、智能批改作业,自动生成试卷、学情分析,轻松提升教学效率!
北京-宏哥
2025/04/09
6600
推荐阅读
相关推荐
秒懂!DeepSeek提示词手册
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档