Scala面向对象

三大特征:封装、继承、多态

1、类的定义和使用

package top.ruandb.scala.Course02
object Simple { def main(args: Array[String]): Unit = { val person = new People;
person.name="张三"
println(person.name +" "+ person.age)
person.eat("香蕉")
person.printInfo()
} //类的定义
class People(){
//定义属性
var name:String = _
val age = 18
//私有属性
private[this] val gender= "male" //定义方法
def eat(food:String): Unit ={
println(name + "正在吃" + food)
} def printInfo(): Unit ={
println("gender:"+gender)
}
}
}

2、构造器

package top.ruandb.scala.Course02

object Constructor {

  def main(args: Array[String]): Unit = {

    //使用主构造器
val person1 = new People("张三",18);
println(person1.name + " " + person1.age + " " + person1.gender )
//使用附属构造器
val person2 = new People("李四",22,"male")
println(person2.name + " " + person2.age + " " + person2.gender )
} //主构造器
class People(val name:String,val age:Int){ var gender:String = _ //附属构造器
def this(name: String,age:Int,gender:String){
this(name,age)//附属构造器必须首先调用主构造器或者其他附属构造器
this.gender = gender
};
}
}

3、继承 extends

package top.ruandb.scala.Course02

import top.ruandb.scala.Course02.Constructor.People

object Constructor {

  def main(args: Array[String]): Unit = {

    val student = new Student("王五",89,"通信工程")
println(student.name + " " + student.age + " " + student.major) println(student.toString) } //主构造器
class People(val name:String,val age:Int){ var gender:String = _
val height:Float = 1.73f def this(name: String,age:Int,gender:String){
this(name,age)
this.gender = gender
};
}
//Student类继承People类
class Student (name:String,age:Int,var major:String) extends People(name,age){ //重写属性
override val height =1.65f
//重写toString方法
override def toString: String = "name:" + name +" "+ "age:" + age + " " + "major:" + major
}
}

4、抽象类

/**
* 抽象类,只有方法定义,没有方法实现
* 属性也只有定义
*/
abstract class People1{
var name:String
var age:Int def eat(food:String)
def speak
} /**
* 继承抽象类,重写方法和属性
*/
class Person1 extends People1{ override var name: String = "赵六"
override var age: Int = 100 override def eat(food: String): Unit = println("吃"+food)
override def speak: Unit ={
println("大声说话")
}
}

5、伴生类和伴生对象

如果有一个Class,还有一个与Class同名的Object

那么就称这个Object是Class的伴生对象,Class是Object的伴生类,其中伴生对象是一个单例对象

伴生对象和伴生类可以互相访问其私有成员

package top.ruandb.scala.Course03
object Companion { def main(args: Array[String]): Unit = { for( i <- 1.to(10)){
TestCompanion.incr
}
println(TestCompanion.count)//结果为10,说明伴生对象是一个单例对象 }
} /**
* 伴生类和伴生对象
* class TestCompanion是伴生对象Object TestCompanion的伴生类
* object TestCompanion是伴生类class TestCompanion的伴生对象
*/ //伴生类
class TestCompanion{
} //伴生对象
object TestCompanion{ var count = 0
def incr ={
count += 1
}
}

6、scala apply

package top.ruandb.scala.Course03

object ApplyApp {

  def main(args: Array[String]): Unit = {

    val at1 = ApplyTest()//实际是通过伴生对象apply方法进行了对象实例化,避免了手动new对象
}
}
class ApplyTest{
}
object ApplyTest{
def apply() = {
println("object apply function")
new ApplyTest
}
}

Scala学习——面向对象的更多相关文章

  1. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

  2. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  3. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

  4. scala学习之路一

    所谓学习,那么首先就先简单介绍一下scala吧 1.scala的介绍 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. Scal ...

  5. Scala学习随笔——Scala起步

    实验楼学习Scala语言的笔记,课程网址为https://www.shiyanlou.com/courses/490 一.Scala简介 Scala 是一门多范式的编程语言,类似于 Java .设计初 ...

  6. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  7. Scala学习系列一

    一 scala介绍 Scala是一门以java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言. 1)  Scala 是一门多范式 (multi-parad ...

  8. Scala学习资源

    Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...

  9. 【Scala】Scala学习资料

    Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...

随机推荐

  1. 标准自编码器(TensorFlow实现)

    由 Hinton 提出的标准自动编码机(标准自编码器)只有一个隐藏层,隐藏层中神经元的数量少于输入(和输出)层中神经元的数量,这会压缩网络中的信息,因此可以将隐藏层看作是一个压缩层,限定保留的信息. ...

  2. CodeGen标记循环

    CodeGen标记循环 标记循环是一个模板文件构造,它允许您迭代CodeGen拥有的标记信息的集合.为了使用标记循环,必须基于至少定义了一个字段标记的存储库结构生成代码.              标 ...

  3. 最小高度树Java版本(力扣)

    最小高度树 给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树. 示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10, ...

  4. React-Antd4的Form表单校验

    之前很少用react做项目,最近入职新公司,用的react,在自己的摸索过程中,慢慢会记录一些使用方法.今天简单记录一下使用antd 4.0版本的Form表单校验,直接代码. 需要购买阿里云产品和服务 ...

  5. Linux中查看网络命令

    tcp三次握手,所以一直在listening,在等待信号 udp是没有listening状态的,因为不管你在不在都会发信息给你. netstat -r  =route -n  可以查看路由

  6. Processing中PImage类和loadImage()、createImage()函数的相关解析

    聊一聊Processing中PImage类和loadImage().createImage()函数.因为要借P5做多媒体创意展示,图片是一个很重要的媒体.有必要就图片的获取和展放作总结. 首先 有一点 ...

  7. js笔记16

    动画 (1)css样式提供了运动  过渡的属性transition 从一种情况到另一种情况叫过渡 transition:attr   time   linear   delay attr 是变化的属性 ...

  8. 关于安装运行MYSQL8.0简单使用及注意事项 On Docker Desktop & WSL2

    背景介绍 MYSQL是业界非常流行的一款关系型数据库系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL所使用的SQL语言是用于访问数据 ...

  9. 揭开Docker的面纱

    开新坑了,开始挖坑Docker了,兄弟们.为什么需要Docker呢?Docker是什么?这里开始揭开Docker的面纱. 一.为什么需要Docker 可能每个开发人员都有一种困扰,软件开发完之后部署项 ...

  10. 【译】在运行时编辑代码的 .NET 热重载

    今天,我们很高兴向你介绍 Visual Studio 2019 中 16.11(预览版1)中的 .NET 热重载(通过 .NET 6(预览版4)中的 dotnet watch 命令行工具).在这篇文章 ...