一、包

 1 package com{
2
3 import com.atguigu.scala.Inner
4
5 // 在外层包中定义单例对象
6 object Outer{
7 var out: String = "out"
8
9 def main(args: Array[String]): Unit = {
10 println(Inner.in)
11 }
12 }
13 package atguigu{
14 package scala{
15 // 内层包中定义单例对象
16 object Inner{
17 var in: String = "in"
18 def main(args: Array[String]): Unit = {
19 println(Outer.out)
20 Outer.out = "outer"
21 println(Outer.out)
22 }
23 }
24 }
25 }
26 }
27
28 // 在同一文件中定义不同的包
29 package aaa{
30 package bbb{
31
32 object Test01_Package{
33 def main(args: Array[String]): Unit = {
34 import com.atguigu.scala.Inner
35 println(Inner.in)
36 }
37 }
38 }
39 }

二、包对象

在 Scala 中可以为每个包定义一个同名的包对象,定义在包对象中的成员,作为其对应包下所有 class 和 object 的共享变量,可以被直接访问。

 1 //package chapter06
2 //
3 //object Test02_PackageObject {
4 // def main(args: Array[String]): Unit = {
5 // commonMethod()
6 // println(commonValue)
7 // }
8 //}
9
10 package chapter06{
11 object Test02_PackageObject {
12 def main(args: Array[String]): Unit = {
13 commonMethod()
14 println(commonValue)
15 }
16 }
17 }
18
19 package ccc{
20 package ddd{
21 object Test02_PackageObject{
22 def main(args: Array[String]): Unit = {
23 println(school)
24 }
25 }
26 }
27 }
28
29 // 定义一个包对象
30 package object ccc{
31 val school: String = "atguigu"
32 }

三、导包

四、类和对象

1、scala没有public关键字,默认public。

2、Bean 属性(@BeanPropetry),可以自动生成规范的 setXxx/getXxx 方法。

 1 package chapter06
2
3 import scala.beans.BeanProperty
4
5 object Test03_Class {
6 def main(args: Array[String]): Unit = {
7 // 创建一个对象
8 val student = new Student()
9 // student.name // error, 不能访问private属性
10 println(student.getAge)
11 println(student.sex)
12 student.sex = "female"
13 println(student.sex)
14 }
15 }
16
17 // 定义一个类
18 class Student {
19 // 定义属性
20 private var name: String = "alice"
21 @BeanProperty
22 var age: Int = _
23 var sex: String = _
24 }

3、访问权限

4、动态绑定

Scala 中属性和方法都是动态绑定,而 Java 中只有方法为动态绑定。

 1 package chapter06
2
3 object Test08_DynamicBind {
4 def main(args: Array[String]): Unit = {
5 val student: Person8 = new Student8
6 println(student.name)
7 student.hello()
8 }
9 }
10
11 class Person8 {
12 val name: String = "person"
13 def hello(): Unit = {
14 println("hello person")
15 }
16 }
17
18 class Student8 extends Person8 {
19 override val name: String = "student"
20 override def hello(): Unit = {
21 println("hello student")
22 }
23 }

val student: Person8 = new Student8
使用父类实例化子类对象实例,同时把子类的属性也动态绑定到了父类。

Scala 类和对象与Java的对比的更多相关文章

  1. Scala类与对象

    类简介 简介 类是对象的蓝图.一旦你定义了类,就可以用关键字new根据类的蓝图创建对象.在类的定义里,可以放置字段和方法,这些被笼统地称为成员.对于字段,不管是val还是var定义的,都是指向对象的变 ...

  2. Spark记录-Scala类和对象

    本章将介绍如何在Scala编程中使用类和对象.类是对象的蓝图(或叫模板).定义一个类后,可以使用关键字new来创建一个类的对象. 通过对象可以使用定义的类的所有功能. 下面的图通过一个包含成员变量(n ...

  3. Scala实战高手****第9课:Scala类和对象彻底实战和Spark源码鉴赏

    scala类和对象 RDD中创建_sc和deps相比java更加的简洁. 在Spark的例如SparkContext.sqlSpark等全局成员在完成实例化. 在唯一实例的时候一般不会去使用伴生对象a ...

  4. JS中集合对象(Array、Map、Set)及类数组对象的使用与对比

    原文地址 在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java中泛型强制要求指定类型. ES6引入了iterable类型, ...

  5. Scala类和对象(二)

    1. 类和属性 1.1 如何控制构造函数字段的可见性 在Scala中: 如果一个字段被声明为var, Scala会为该字段生成getter和setter方法. 如果字段是val, Scala只生成ge ...

  6. Scala类和对象

    1.面向对象 Scala的类与java.C++的一些比起来更简洁,速度更快 对象:使用object关键字修饰的 类:使用class关键字修饰的new Person()实例对象 new类:类的实例(对象 ...

  7. Scala 类和对象

    Scala class: Scala 源文件中可以有很多类(class),这些类默认都是Public的,public是Scala的默认访问级别.在Scala中,声明一个未用priavate修饰的字段 ...

  8. JS中集合对象(Array、Map、Set)及类数组对象的使用与对比(转载)

    在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java中泛型强制要求指定类型. ES6引入了iterable类型,Array ...

  9. 【类与对象】--------java基础学习第六天

    类与对象 1. 对于面向对象的开发来讲也分为三个过程: OOA(面向对象分析) OOD(面向对象设计) OOP(面向对象编程) 2. 面向对象的基本特征 2.1. 封装:保护内部操作(属性,方法)不被 ...

  10. scala 类,伴生对象

    1.属性的定义 编写一个PersonS类,并在其中定义一些属性,通过PersonS.scala 编译后的情况查看,可以知道不同修饰符修饰的属性分别会生成什么方法(set,get) package co ...

随机推荐

  1. Java判断是否为闰年

    题目: 判断一个输入的整数是否为闰年? 1.需要对输入的数据类型进行验证 2.支持多次输入和结束符号判断,例如输入q代表退出程序. 分析: 闰年的判断规则如下: (1)若某个年份能被4整除但不能被10 ...

  2. BUU PWN RIP1 RET2CODE WRITEUP

    1.下载附件后,运行是一个输入程序,IDA分析main函数,gets可溢出. F5伪代码如下: int __cdecl main(int argc, const char **argv, const ...

  3. Gitlab 16.9.0 用Access Token注册Gitlab Runner

    升级到当前最新版Gitlab之后 在"管理中心"的"CI/CD"--"Runners"下,提示以前的那种注册令牌的方式已经过时了. 点击右上 ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (207)-- 算法导论15.4 4题

    四.说明如何只使用表 c 中 2*min(m,n) 个表项及O(1)的额外空间来计算LCS的长度.然后说明如何只用 min(m,n) 个表项及O(1)的额外空间完成相同的工作.要写代码的时候,请用go ...

  5. [VueJsDev] 其他知识 - NestJS 学习内容

    [VueJsDev] 目录列表 https://www.cnblogs.com/pengchenggang/p/17037320.html NestJS 学习内容 NestJS 学习总结 Step. ...

  6. ip 表单验证 vue iview

    ip 表单验证 vue iview template <Row v-show="config.bindIP"> <Col span="12"& ...

  7. 删除文件或目录 被进程占用或锁定locked 查询进程 资源监视器-cpu-关联句柄-输入文件全路径

    删除文件或目录 被进程占用或锁定 查询进程 资源监视器-cpu-关联句柄-输入文件全路径 右键点击桌面的Win图标,点击"任务管理器">>点击左上角"性能&q ...

  8. base64 转文件上传

    // 将base64转换为blob dataURLtoBlob (dataurl) { let arr = dataurl.split(',') let mime = arr[0].match(/:( ...

  9. 灰度发布、蓝绿部署、金丝雀发布和AB测试及在k8s中的实现

    灰度发布.蓝绿部署.金丝雀发布和AB测试都是软件开发和部署中常用的策略,每种策略都有其特定的用途和优势.下面是对这些策略的简要解释: 灰度发布(Grayscale Release): 灰度发布是一种逐 ...

  10. Redis持久化之RDB(Redis DataBase) 和 AOF(Append Only File)

    Redis提供了两种持久化方式:RDB(Redis DataBase)和AOF(Append Only File). 1. RDB持久化: RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁 ...