一、包

 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. win32- 窗口模板

    主要用于日常的win32窗口的测试 #include <Windows.h> #include <stdio.h> #include <iostream> usin ...

  2. Mqtt开发笔记:Mqtt服务器搭建

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  3. 初始pyqt5

    开发pyqt5桌面应用 必须使用两个类:QApplication和QWidget.都在PyQt5.QtWidgets中 安装 pip install pyqt5 -i https://pypi.dou ...

  4. java+mysql数据库实现的学生管理系统

    说明: java+mysql数据库实现的学生管理系统 功能 实现增加学生.删除学生.修改学生.学生列表.查询学生功能 截图: 开发工具/技术 java  eclipse 价格:50元,有需要联系 微信 ...

  5. Gitlab的部署

    # Gitlab sudo docker run --detach \   --hostname gitlab.example.com \   --publish 443:443 --publish ...

  6. MAUI调用.so库

    必要条件: (一)安装JDK (二)安装NDK (三)安装Android Studio(其实可以不用装也行) 使用Android Studio构件.so包 构件.so包 1. 使用Android st ...

  7. SpringCloud 网关组件Gateway

    官网文档: https://docs.spring.io/spring-cloud-gateway/docs/2.2.5.RELEASE/reference/html/ 1. 概述 1.1 什么是网关 ...

  8. [学习笔记]PostgreSQL数据库的安装和配置

    安装 安装源 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat ...

  9. WPF之控件布局

    目录 控件概述 WPF的内容模型 各类内容模型详解 ContentControl族 HeaderedContentControl族 ItemsControl族 ListBox:在XAML中添加数据 L ...

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

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