一、包

 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 I/O 教程(六) BufferedInputStream 类

    Java BufferedInputStream Class Java BufferedInputStream class 用于从输入流读取数据,和BufferedOutStream一样内部使用缓冲机 ...

  2. 细聊ASP.NET Core WebAPI格式化程序

    前言 我们在使用ASP.NET Core WebApi时它支持使用指定的输入和输出格式来交换数据.输入数据靠模型绑定的机制处理,输出数据则需要用格式化的方式进行处理.ASP.NET Core框架已经内 ...

  3. 搜索引擎RAG召回效果评测MTEB介绍与使用入门

    RAG 评测数据集建设尚处于初期阶段,缺乏针对特定领域和场景的专业数据集.市面上常见的 MS-Marco 和 BEIR 数据集覆盖范围有限,且在实际使用场景中效果可能与评测表现不符.目前最权威的检索榜 ...

  4. 利用wiile双层循环打印各种星星---day06

    # 十行十列小星星 j = 0 #定义行数 while j<10: #当行数小于10的时候 i=0 #定义列 while i <10: #当列小于10的时候 print('*',end=' ...

  5. vscode添加gitbash终端方法

    1.打开vscode 2.点击文件,ctrl+, 3.搜索shell windows { ... // 添加如下代码 "terminal.integrated.profiles.window ...

  6. ASP.NET Core 微信支付(一)【统一下单 APIV3】

    官方参考资料 签名:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_0.shtml 签名生成:https://wechatp ...

  7. windows下的批处理bat文件和Linux下的shell文件的含义

    原文:https://www.cnblogs.com/caiguodong/p/10308255.html shell(Linux.Solaris) bat(windows) 含义 # rem 注释行 ...

  8. 【Java复健指南07】OOP中级02-重写与多态思想

    前情提要:https://www.cnblogs.com/DAYceng/category/2227185.html 重写 注意事项和使用细节 方法重写也叫方法覆法,需要满足下面的条件 1.子类的方法 ...

  9. 学Python只需一张图

    有编程基础的人一看就可以了解 Python 的用法了.真正的 30 分钟上手.

  10. .Net缓存之MemoryCahe

    1. MemoryCahe NetCore中的缓存和System.Runtime.Caching很相似,但是在功能上做了增强,缓存的key支持object类型:提供了泛型支持:可以读缓存和单个缓存项的 ...