当前位置: 首页 > news >正文

Scala之基础面向对象编程

Scala之基础面向对象编程


文章目录

  • Scala之基础面向对象编程
    • 写在前面
    • 包package
      • 基本语法
      • 扩展语法
    • 导入import
      • 基本语法
      • 扩展语法
    • 类class
      • 基本语法
      • 扩展语法
    • 属性
      • 基本语法
      • 扩展语法
    • 访问权限
    • 方法
    • 对象
    • 构造方法


写在前面

  • 操作系统:Windows10
  • JDK版本:jdk1.8
  • Maven版本:Maven-3.5.4
  • Scala版本:Scala-2.12.11
  • IDE工具:IntelliJ IDEA 2019.2.3

包package

基本语法

Scala中基本的package包语法和Java完全一致,例如:

package cn.whybigdata.bigdata.scala

扩展语法

Java中package包的语法比较单一,Scala对此进行扩展

  • Scala中的包和类的物理路径没有关系

  • package关键字可以嵌套声明使用

package cn
package whybigdata {package bigdata {package scala {object ScalaPackage {def test(): Unit = {println("test scala......")}}}}
}
  • 同一个源码文件中子包可以直接访问父包中的内容,而无需import
package cn
package whybigdata {package bigdata {class Test {}package scala {object ScalaPackage {def test(): Unit = {new Test()}}}}
}
  • Scala中package也可以看作对象,并声明属性函数
package cn
package object whybigdata {val name : String = "whybigdata"def test(): Unit = {println( name )}
}
package whybigdata {package bigdata {package scala {object ScalaPackage {def test(): Unit = {}}}}
}

导入import

基本语法

Scala中基本的import导入语法和Java完全一致,举例如下:

import java.util.List
import java.util._   

注意:Scala中使用下划线_ 代替Java中的星号

扩展语法

Java中import导入的语法比较单一,Scala对此进行扩展

  • Scala中的import语法可以在任意位置使用
object ScalaImport{def main(args: Array[String]): Unit = {import java.util.ArrayListnew ArrayList()  }
}
  • Scala中可以导包,而不是导类
object ScalaImport{def main(args: Array[String]): Unit = {import java.utilnew util.ArrayList()}
}
  • Scala中可以在同一行中导入相同包中的多个类,简化代码
import java.util.{List, ArrayList}
  • Scala中可以屏蔽某个包中的类
import java.util._
import java.sql.{ Date=>_, Array=>_, _ }
  • Scala中可以给类起别名,简化使用

import java.util.{ArrayList=>AList}

object ScalaImport{def main(args: Array[String]): Unit = {new AList()}
}
  • Scala中可以使用类的绝对路径而不是相对路径

import root.java.util.ArrayList

  • 默认情况下,Scala中会导入如下包和对象
import java.lang._
import scala._
import scala.Predef._

类class

面向对象编程中类可以看成一个模板,而对象可以看成是根据模板所创建的具体事物

基本语法

  • 声明类:访问权限 class 类名 { 类主体内容 }
class User {// 类的主体内容
}
  • 对象:new 类名(参数列表)
new User()

扩展语法

Scala中一个源文件中可以声明多个公共类

属性

基本语法

class User {var name : String = _ // 类属性其实就是类变量var age : Int = _ // 下划线表示类的属性默认初始化
}

扩展语法

Scala中的属性其实在编译后也会生成方法

class User {var name : String = _val age : Int = 30private val email : String = _@BeanProperty var address : String = _
}

访问权限

Scala中的访问权限和Java中的访问权限类似,但是又有区别:

  • private : 私有访问权限
  • private[包名]: 包访问权限
  • protected : 受保护权限,不能同包;公共访问权限

方法

Scala中的类的方法其实就是函数,所以声明方式完全一样,但是必须通过使用对象进行调用

object ScalaMethod{def main(args: Array[String]): Unit = {val user = new Useruser.login("whybigdata", "123456")}
}class User {def login(name:String, password:String): Boolean = {false}
}

对象

Scala中的对象和Java是类似的

  • val | var 对象名 [:类型] = new 类型()
var user : User = new User()

构造方法

和Java一样,Scala中构造对象也需要调用类的构造方法来创建。并且一个类中可以有任意多个不相同的构造方法。这些构造方法可以分为2大类:主构造函数辅助构造函数

  • 两种函数的示例:
class User() { // 主构造函数var username : String = _ def this(name:String) { // 辅助构造函数,使用this关键字声明this() // 辅助构造函数应该直接或间接调用主构造函数username = name}def this(name:String, password:String) {this(name) // 构造器调用其他另外的构造器,要求被调用构造器必须提前声明}
}

全文结束!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [Linux CMD] 文件编辑 nano (待更新)
  • WSL-Ubuntu20.04训练环境配置
  • 所有权与生命周期:Rust 内存管理的哲学
  • 什么是跨链交换,以bitget钱包为例
  • 谷歌Gmail账号又被封了?原因与解决方法
  • excel及panda的部分内容
  • ffmpeg 时间相关--时间基,timebase,pts,dts,duration
  • 充气膜游泳馆安全吗—轻空间
  • Log4j的原理及应用详解(四)
  • 基于单片机的智能医疗监护系统设计
  • EasyAnimate-v3版本支持I2V及超长视频生成
  • Netty一文搞懂——核心原理篇<随手笔记>
  • flink 配置表
  • buuctf-web
  • 一图了解网络通信原理
  • Android优雅地处理按钮重复点击
  • Angular4 模板式表单用法以及验证
  • Cookie 在前端中的实践
  • idea + plantuml 画流程图
  • Java 内存分配及垃圾回收机制初探
  • JS函数式编程 数组部分风格 ES6版
  • MobX
  • tweak 支持第三方库
  • Vue 2.3、2.4 知识点小结
  • vue--为什么data属性必须是一个函数
  • 大主子表关联的性能优化方法
  • 前端之Sass/Scss实战笔记
  • 使用 5W1H 写出高可读的 Git Commit Message
  • #70结构体案例1(导师,学生,成绩)
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #LLM入门|Prompt#3.3_存储_Memory
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (接口自动化)Python3操作MySQL数据库
  • (译) 函数式 JS #1:简介
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .bashrc在哪里,alias妙用
  • .gitignore文件设置了忽略但不生效
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .Net插件开发开源框架
  • .net经典笔试题
  • @Builder注释导致@RequestBody的前端json反序列化失败,HTTP400
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ Linux ] Linux信号概述 信号的产生
  • []我的函数库