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. 激光雷达lidar与点云数据

    激光雷达lidar与点云数据 DEM是分布和显示数字地形的首个广泛使用的机制. 点云是在空间中随机放置的3D点的集合.传感器发出能量脉冲并乘以其返回行程(TWTT,双向行程时间).知道了传感器的位置以 ...

  2. 记录第一次完整的uni-app开发经验

    由于我是做后端的,一直没有做过前端的页面,以前在学校图书馆看的都是jsp技术,几乎是把java代码嵌套在前端界面.后面出来实习了才发现,jsp是真的落后了.现在的大学和实际工作所需偏差太大了,没办法. ...

  3. python_selenium_PO模式下显示等待、隐式等待封装,结合Excel读取元素可取默认等待时间配置

    basepage中等待的封装 def implicitly_wait(self): self.driver.implicitly_wait(5)def wait(self): time.sleep(5 ...

  4. 自动发布.NET Core Web应用

    1 原因和目的 相信很多开发者都需要将自己的编写的应用进行编译并部署到服务器上,这个过程在个人或小型团队的项目中都是一个简单的事情.但是对于并行化开发而言,就需要通过工具来辅助这个过程.于是,我参考了 ...

  5. kafka基础知识梳理

    一.Kafka的基本概念 关键字: 分布式发布订阅消息系统:分布式的,分区的消息服务 Kafka是一种高吞吐量的分布式发布订阅消息系统,使用Scala编写. 对于熟悉JMS(Java Message ...

  6. 【题解】斐波拉契 luogu3938

    题目 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家斐波那契提出的模型来进行 繁衍:一对兔子从出生后第二个月起,每个月刚开始的时候都会产下一对小兔子. ...

  7. Java8新特性代码示例(附注释)- 方法引用,Optional, Stream

    /** * java8中的函数式接口,java中规定:函数式接口必须只有一个抽象方法,可以有多个非抽象方法,同时,如果继承实现了 * Object中的方法,那么也是合法的 * <p> * ...

  8. 《机器学习Python实现_10_10_集成学习_xgboost_原理介绍及回归树的简单实现》

    一.简介 xgboost在集成学习中占有重要的一席之位,通常在各大竞赛中作为杀器使用,同时它在工业落地上也很方便,目前针对大数据领域也有各种分布式实现版本,比如xgboost4j-spark,xgbo ...

  9. UVA 10887 set或hash

    题意: 给出n个A串和m个B串,将这A串与B串连接(B接在A后面)可以生成n*m个AB串,求不同的AB串的数量 分析: set直接水过 #include <bits/stdc++.h> u ...

  10. jenkins pipeline构建后返回构建结果给gitlab

    jenkins pipeline构建后返回构建结果给gitlab 使用场景 gitlab 合并请求时要求管道任务必须成功,否则无法执行合并操作,又不想使用gitlab ci 工具. 实现方法 1.Ge ...