内部类的基本使用|学习笔记

简介: 快速学习内部类的基本使用。

开发者学堂课程【Scala 核心编程-基础:内部类的基本使用】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/9003


内部类的基本使用

 

内容介绍

嵌套类

、Java 内部类的简单回顾

、Java 内部类基本语法

Java 内部类的分类

、Java 内部类回顾案例

Scala 嵌套类的使用1

 

一、嵌套类

1、基本介绍

在 Scala 中,你几乎可以在任何语法结构中内嵌任何语法结构可以嵌套写如在类中可以再定义一个类,这样的类是嵌套类,其他语法结构也是一样嵌套类类似于 Java 中的内部类。

2、面试题Java 中,类共有五大成员,请说明是哪五大成员

(1)属性

(2)方法

(3)内部类

(4)构造器

(5)代码块


二、Java 内部类的简单回顾

在 Java 中,一个类的内部又完整的嵌套了另个完整的类结构。被嵌套的类称为内部类(inner class), 嵌套其他类的类称为外部类。内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系。

 

三、Java 内部类基本语法

class Outer{ //外部类

class Inner{ //内部类

}

}

class Other{//外部其他类

}

 

四、Java 内部类的分类

1、从定义在外部类的成员位置上来看,

(1)成员内部类( 没用 static 修饰)

(2)静态内部类( 使用 static 修饰)

2、定义在外部类局部位置上(比如方法内)来看:

(1)分为局部内部类(有类名)

(2)匿名内部类(没有类名)

 

五、Java 内部类回顾案例

之后要跟 Scala 的嵌套类做比较

新建一个包,innerclass。

创建 JavaInnerClass

package com. atguigu.JavaInnerClass;

public class TestJavaClass {

public static void main(String[] args) {

//使用

//创建一个外部类对象

OuterClass outer1 = new OuterClass();

//创建一个外部类对象

OuterClass outer2 = new OuterClass();

//创建 Java 成员内部类

//说明在 Java 中,将成员内部类当做个属性,因此使用下面的方式来创建 outer1 .new InnerClass().

OuterClass .InnerClass inner1 = outer1.new InnerClass();在 java 内部类中创建一个内部类的语法比较特别,new 写在点后面因为在 Java 中,将成员内部类当做个属性。

OuterClass. InnerClass inner2 = outer2 new InnerClass();

//下面的方法调用说明在 java 中,内部类只和类型相关,也就是说,只要是

//OuterClass.InnerClass 类型的对象就可以传给形参 InnerClass ic

inner1.test(inner2); inner1inner2

inner2. test(inner1); inner2inner1

但是在 Scala 中这么写会报错Scala 内部类默认是跟外部对象关联

//创建 java 静态内部类

//因为在 java 中静态内部类是和类相关的,使用 new OuterClass. StaticnnerClass()

OuterClass StaticlnnerClass staticlnner = new OuterClass StaticInnerClass();

静态内部类和 java 内部类几乎是一样的

}

}

class OuterClass (//外部类

class InnerClass { //成员内部类

//test 方法可以接收 InnerClas 实例

public void test( InnerClass ic ) {

System out. println(ic);

}

}

static class StaticInnerClass //静态内部类

}

}

内部类有很多作用比如本身内部类是不能访问私有的东西但是内部类可以访问外部类的私有属性涉及到加载时机的问题如果是一个静态代码块它实际上可以做延迟加载的作用

运行之后没问题

 

六、Scala 嵌套类的使用1

请编写程序,定义 Scala 的成员内部类和静态内部类,并创建相应的对象实例。没有 static 关键字它的静态内部类就要放在伴生对象中成员内部类仍然跟之前一样

class ScalaOuterClass {

class ScalalnnerClass { //成员内部类

}

}

object ScalaOuterClass{//伴生对象

class ScalaStaticInnerClass { //静态内部类

}

}

创建两个外部实例

val outer1 : ScalaOuterClass = new ScalaOuterClass();

val outer2 : ScalaOuterClass = new ScalaOuterClass();

// Scala 创建内部类的方式和 Java 不一样,将 new 关键字放

置在前,使用对象.内部类的方式创建

val inner1 = new outer1 ScalalnnerClass() 

val inner2 = new outer2. ScalalnnerClass()

从语法上看它的内部类其实是由外部对象进行创建的内部类的类型其实不单单是看里面的类而是跟外部对象相关

创建内类的语法格式跟java是一样的

//创建静态内部类对象

val staticInner = new

ScalaOuterClass. ScalaStaticInnerClass()

println(staticInner)

创建 ScalaInnerClass选择 object

package com. atguigu. chapter08.innerclass

object ScalaInnerClassDemo {

def main(args: Array[String]): Unit = {

//测试1,创建两个外部类的实例

val outer1 : ScalaOuterClass = new ScalaOuterClass();

val outer2 : ScalaOuterClass = new ScalaOuterClass();

//在 scala 中创建成员内部类的语法是

//对象内部类的方式创建,这里语法可以看出在 scala 中,默认情况下内部类实例和外部对象关联

就是用 outer1创建出的内部类和 outer2创建出的内部类不是同一个类型

Val inner1 new outer1. ScalaInperClass 从这里可以看出创建语法跟 java 不一样

Val inner2 new outer2. ScalaInperClass

//创建静态内部类实例

val staticInner= new Scal aOuterclass . ScalastaticInnerClass()

}

}

//外部类

class SçalaOuterClass {

class ScalaInnerclass {//成员内部类

}

}

object ScalaOuterClass {//伴生对象

class ScalaStaticInnerclass {//静态内部类注意要写在伴生对象里面否则它就不是一个静态内部类

}

}

相关文章
|
4天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
5天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1125 152
|
19天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1794 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
719 152
|
7天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
494 5
|
12天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
671 14