一、包

 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. CF1398C Good Subarrays(写给我们萌新团体)

    Good Subarrays 传送门: Good Subarrays - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 暴力!!!!! 一如既往的暴力!!! 复杂度O(n^2) ...

  2. C++的strcat实现

    #include <iostream> #pragma warning(disable:4996); using namespace std; char* t = (char*)mallo ...

  3. UtilMeta - 简洁高效的 Python 后端元框架

    最近开源了我开发多年的一个 Python 后端框架:UtilMeta 项目介绍 UtilMeta 是一个用于开发 API 服务的后端元框架,基于 Python 类型注解标准高效构建声明式接口与 ORM ...

  4. 一个自定义可扩展的检测变量的函数typeofIt();

    自定义方法typeofIt()是用来判断传入的变量或属性是什么类型的; 1.如果是基础类型变量则返回代表基础变量类型小写格式的字符串及一些简易说明; 2.如果是对象类型变量则返回结尾带有"O ...

  5. 硬件开发笔记(十一):Altium Designer软件介绍、安装过程和打开pcb工程测试

    前言   前面做高速电路,选择是阿li狗,外围电路由于读者熟悉AD,使用使用ad比较顺手,非高速电路就使用AD了,其实AD也可以做高速电路,由于笔者从13年开始做硬是从AD9开始的,所以开始切入AD做 ...

  6. JAVA对象的生命周期(二)-对象的创建

    目录 对象创建的几种方式 类加载检查. 内存分配 初始化零值 设置对象头 执行init方法 对象创建的几种方式 new clone newInstance 反序列化 String s = " ...

  7. 【Azure Cloud Service】云服务升级后,查看配置文件发现编码变为utf-16

    问题描述 通过Migrate to ARM,把经典云服务升级成云服务(外延支持)后,在查看云服务的配置XML文件,发现文件的编码格式由 UTF-8 改变为 UTF-16 由此,引发了三个问题 1)Cl ...

  8. Java 接口的使用

    1 package com.bytezreo.interfacetest; 2 3 /** 4 * 5 * @Description 接口的使用 6 * @author Bytezero·zhengl ...

  9. centos 8远程分发复制jdk到另一个虚拟机

    在localzly节点操作成功后可以使用远程复制命令将JDK远程复制到slave1节点之中:(此命令在localzly中操作) scp -r /usr/java root@slave1:/usr/ 配 ...

  10. Java面试必考题之线程的生命周期,结合源码,透彻讲解!

    写在开头 在前面的几篇博客里,我们学习了Java的多线程,包括线程的作用.创建方式.重要性等,那么今天我们就要正式踏入线程,去学习更加深层次的知识点了. 第一个需要学的就是线程的生命周期,也可以将之理 ...