Scala学习——面向对象
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学习——面向对象的更多相关文章
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- scala学习之路一
所谓学习,那么首先就先简单介绍一下scala吧 1.scala的介绍 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. Scal ...
- Scala学习随笔——Scala起步
实验楼学习Scala语言的笔记,课程网址为https://www.shiyanlou.com/courses/490 一.Scala简介 Scala 是一门多范式的编程语言,类似于 Java .设计初 ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习系列一
一 scala介绍 Scala是一门以java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言. 1) Scala 是一门多范式 (multi-parad ...
- Scala学习资源
Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...
- 【Scala】Scala学习资料
Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...
随机推荐
- 番外篇:搭建Windows环境下的RabbitMQ环境
搭建Windows环境下的Rabbitmq环境 下载erlang语言包OTP.官网地址: https://www.erlang.org/downloads 如果下载不了,可以选择百度网盘下载,里面的版 ...
- 信道均衡之非线性均衡——Tomlinson-Harashima Precoding(THP)
线性均衡可以做在接收端,也可以做在发送端,而DFE只能做在接收端.对于DFE的讨论都是建立在判决器能够判决正确的情况下,但是如果每一个发送的符号含有多比特信息,比如PAM16,由于发送信号的最大能量是 ...
- 【逆向实战】ES文件浏览器未授权访问漏洞(CVE-2019-6447)具体分析及利用
/作者:Kali_MG1937 CSDN博客号:ALDYS4 QQ:3496925334 未经许可,禁止转载/ 漏洞简介 CVE-2019-6447是Android端上的一个知名软件:ES文件浏览器的 ...
- WordPress安装篇(2):用宝塔面板在Windows上安装WordPress
上一篇文章介绍了如何使用PHPStudy工具在Windows Server环境安装WordPress,接下来介绍一款更加强大的部署WordPress的集成工具--宝塔面板.宝塔面板不仅提供免费版本,还 ...
- 【题解】覆盖问题 BZOJ1052 HAOI2007 二分
题目描述 某 人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用 3个LL的正方形塑料薄膜将小树遮起来.我 ...
- dos脚本语法学习
一个dos批处理脚本,通过关键字搜索注册表并删除,坑很多,语法也很怪异,详情看注释 @echo off ::声明采用UTF-8编码,避免中文乱码问题,>NUL可以吞掉chcp输出的内容 chcp ...
- 7、linux快捷键
ctrl +a:切换到命令行开始 ctrl+e:切换到命令行结尾 ctrl+c:终止当前命令或脚本 ctrl+d:退出当前shell,相当于exit ctrl+l:清除当前屏幕的内容,相当于clear ...
- AcWing 204. 表达整数的奇怪方式
#include<bits/stdc++.h> using namespace std; typedef long long LL; LL exgcd(LL a,LL b,LL & ...
- CentOS-Docker安装RabbitMQ集群(rabbitmq:3.7.16-management)
准备工作 1.机器资源(分别安装docker环境) 建议机器配置: centos7.x 4G及以上 100GB及以上 2核及以上 192.168.1.101 192.168.1.102 192.168 ...
- Hadoop:什么是Hadoop??
官方讲解: Apache Hadoop 为可靠的,可扩展的分布式计算开发开源软件.Apache Hadoop软件库是一个框架,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集(海量的数据). ...