Scala学习笔记(5)类
1.简单类和无参方法
calss Counter{
private var value = 0 //必须初始字段
def increment(){value +=1} //方法默认是公有的
def current()=value
}
在Scala中,类并不声明为publuc。Scala源文件可以包含多个类,所以这些类具有公有可见性。使用该类需要做的就是构造对象并按照通常的方式来调用方法:
val myCounter = new Counter //或者new Counter()
myCounter.increment()
println(myCounter.current)
调用无参构造方法的时候,可以协商圆括号,也可以不写:myCounter.current<===>myCounter.current() //这二者等价
对于改值器方法即setter increment 使用()比较好的;而对于取值器方法,去掉()是不错的风格
myCounter.increment() //对改值器使用()
println(myCounter.current) //对于取值器方法不使用()
OOP
-----------------------------
scala>class Person{
//定义变量,私有类型,变量必须进行初始化
private var id = 0 ;
//方法默认是public 的
def incre(a:Int)={id+=a}
//如果在定义方法的时候没有加括号,那么在进行调用的时候就一定不能写
def current() =id
}
scala>var p = new Person();
scala>p.current()
scala>p.current
scala>p.incre(100)
2.带getter和setter属性
------------------------------------------
编写java类的时候,我们并不喜欢使用公有字段
public class Person{ //这是Java
public int age ; //java 中是不鼓励这样做的
}
//因为在使用公有字段的时候会导致信息不安全,所以我们更倾向于使用getter和setter方法
public class Person{ //这是java
private int age ;
public int getAge(){return age;}
public void setAge(int age){this.age=age}
}
Scala对每个字段都提供getter和setter方法。在这里。我们定义一个公有字段:
calss Person{
var age = 0
}
这个地方Scala是面向JVM的,其中有一个私有的age字段以及相应的getter和setter方法。
class Person{
private var id = ;
def incre(n:Int)={id+=n}
def current()=id
}
D:\scala>javap Person.class
Compiled from "Person.scala"
public class Person { //在编译过程中已经定义好了
public void incre(int);
public int current();
public Person();
}
private[this]的作用,控制成员变量只能在自己的对象中进行访问
--------------------------------------
class Counter{
private var value = 0;
def incre(n:Int){value+=n}
def isLess(other:Counter)=value<other.value;
}
5.Bean属性
当将scala字段的标注为@BeanProperty的时候,这样的方法会自动生成
import scala.reflect.BeanProperty
定义BeanProperty注解
----------------------------------------
class Person{
@BeanProperty va name:String=_
}
将会生成四个方法:
1.name:String
2.name_=(newValue:String):Unit
3.getName():String
4.setName(newvalue:String):Unit
6.辅助构造器
----------------------------------
Scala类有一个构造器比其他所有的构造器更为重要,他就是主构造器,除了主构造器之外,类还可以有任意多的辅助构造器
辅助构造器:(1)辅助构造器的名称为this;(2)每一个辅助构造器都必须以先前已经定义的其他辅助构造器或者主构造器调用开始
class Person{
var id = ;
var name="tom";
var age =;
//辅助构造
def this(name:String){
this(); //调用主构造
this.name=name;
}
def this(name:String,age:Int){
this(name);
this.age=age;
}
}
7.主构造
class Person(name:String,age:Int){
var id =;
var name ="tom";
var age =;
//辅助构造
def this(name:String){
//调用辅助构造
this(name);
this.age=age;
}
}
//主构造器
//val ===>只读
//var ===>能读能写
class Person(val name:String,var age:Int,var id:Int){ //这个地方在参数列表里面声明了参数,就可以不进行任何的声明了,
//val是常量,var是私有的,
}
Scala学习笔记(5)类的更多相关文章
- [Scala]Scala学习笔记四 类
1. 简单类与无参方法 class Person { var age = 0 // 必须初始化字段 def getAge() = age // 方法默认为公有的 } 备注 在Scala中,类并不声明为 ...
- Scala学习笔记——样本类和模式匹配
1.样本类 在申明的类前面加上一个case修饰符,带有这种修饰符的类被称为样本类(case class). 被申明为样本类的类的特点:1.会添加和类名一致的工厂方法:2.样本类参数列表中的所有参数隐式 ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- python学习笔记4_类和更抽象
python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...
- Java学习笔记之---类和对象
Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态 例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...
- UML学习笔记:类图
UML学习笔记:类图 有些问题,不去解决,就永远都是问题! 类图 类图(Class Diagrame)是描述类.接口以及它们之间关系的图,用来显示系统中各个类的静态结构. 类图包含2种元素:类.接口, ...
- scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类
一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person ...
随机推荐
- c++ 初学者 慢慢成长中
C++书籍推荐 从上往下 Essential C++ C++ Primer 中文版 Effeetive C++ More Effeetive C++ C++ 标准程序库 深度探索c++对象模型 C11
- CodeForces 1200E Compress Words
\(C_n^m\)的typora,点了一下启用源代码模式就把我已经写好的博客弄没了,就给我留个标题,自动保存也只给我保存了个标题--\(C_n^m\),wdnmd Time limit 1000 ms ...
- 【Leetcode】位1的个数
解题方案:位操作的技巧 整数 n 和 n-1(n>0) 做与运算,从其二进制形式来看,可以消掉 n 的二进制数值中最后1个 “1” .循环进行,每次消掉1个 “1” .整数 n 的二进制数值中有 ...
- Scrapy终端(Scrapy shell)
1.介绍文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/shell.html# 2.终端的启用方式:scrapy shell url u ...
- 指定文件或文件夹直接提交到svn指定目录
我这里先说两种方法第一种:1.先将那个目录checkout下来2.将要添加的文件或者文件夹放到这个目录中3.右击文件执行svn菜单中的add命令4.右击文件执行svn菜单中的commit命令第二种:如 ...
- Task的用法
创建任务 无返回值的方式 方式1: var t1 = new Task(() => TaskMethod("Task 1")); t1.Start(); Task.WaitA ...
- Eclipse怎样对项目进行重命名?
当创建一个项目时,可能会随便命名一个项目名,如果想要项目名更有意义,或者为了方便后续项目的命名,怎么重命名项目名呢? 第一步在我们的电脑打开eclipse软件,找到需要重命名的项目,如下图所示: 第二 ...
- Tomcat配置多域名 Alias
在Tomcat配置多域名,目的是和apache相对应,实现多域名访问. 使用 < Alias></ Alias>,务必注意,使用的是首字母大写. 我刚开配置使用小写,如果hos ...
- 一款新的好用的SSH工具——FinalShell,比XShell更牛逼~
FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功能:免费海外服务器远程桌面加速,ssh加速,双边tcp加速,内网穿 ...
- hibernate中的@GeneratedValue与@GenericGenerator
1.GeneratedValue与GenericGenerator的区别 @GeneratorValue注解----JPA通用策略生成器 @GenericGenerator注解----自定义主键生成策 ...