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. CVPR2020:基于自适应采样的非局部神经网络鲁棒点云处理(PointASNL)

    CVPR2020:基于自适应采样的非局部神经网络鲁棒点云处理(PointASNL) PointASNL: Robust Point Clouds Processing Using Nonlocal N ...

  2. VB Aspose.Pdf 字体变小方格问题处理

    宋体是这样写的:SimSun原先以为是:宋体 先定义字体,在PDF中无法设置,这个找了很久,原来是使用:FontRepository.FindFont方式,这个坑了很久,很多都说是setFont,压根 ...

  3. zookeeper命令行练习,熟练节点权限, 数组越界异常解决方案

    https://www.cnblogs.com/qlqwjy/p/10517231.html zookeeper 创建持久有序节点时候报错,我的版本号是3.4.12, 亲测有效 https://blo ...

  4. 前端 JS 之 AJAX 简介及使用

    概述 AJAX 是一个缩写,它的全名是 Asynchronous JavaScript and XML,意思就是异步 JavaScript 和 XML,即用JavaScript执行异步网络请求. AJ ...

  5. 【NX二次开发】Block UI 枚举

    属性: 常规         类型 描述     BlockID     String 控件ID     Enable     Logical 是否可操作     Group     Logical ...

  6. 5000字长文,kurryluo 的自学编程之路

    我是程序员.大众口中非科班的那种,带着高中时期对二进制的恐惧,在大学参加科研比赛后保研,再到和校友一起创业,现在在某大型互联网公司做前端开发,一路走来都是靠自己学习. 前端框架 VUE 的作者尤大说过 ...

  7. 魔镜魔镜,今天有雨吗?——GitHub 热点速览 v.21.25

    作者:HelloGitHub-小鱼干 上周智能驾驶项目的作者曾经做过一个透明小电视机,同透明电视机类似 MagicMirror 也是一个神奇的智能项目,使用它进行模块定制开发,你将拥有一块非常酷炫的智 ...

  8. 入门Kubernetes - YAML文件

    前言 前篇文章中简单了解到如何把.Net Core 程序部署到k8s中,过程中使用了多个*.yaml文件,那么这些文件的格式及含义.语法是如何的呢? 接下来,进一步了解学习 一.YAML介绍: 1.简 ...

  9. keycloak~管理平台的查询bug与自定rest中文检索

    对于keycloak来说,它的管理平台在它的源码中的admin-client中,它会定义相关的rest接口规范:在我们使用keycloak管理平台时,其中有一个组的查询,在我们查询中文组时,它是不支持 ...

  10. 安卓手机改造服务器——基本环境配置(CentOS7 arm32)

    安装好CentOS系统之后,我们需要对环境进行一些基本的配置,让Linux更好用 写在前面 注意:本文章是针对arm32的CentOS7进行配置的,其他系统或不同架构不要尝试. 配置yum镜像源 1. ...