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 ...
随机推荐
- 页面禁止刷新处理Js实现
document.onkeydown = function(e) { e = window.event || e; var k = e.keyCode; //屏蔽ctrl+R,F5键,ctrl+F5键 ...
- 「PKUSC 2018」真实排名
题目链接 戳我 \(Solution\) 我们将现在所要进行的数设为\(now\) 我们分情况讨论一下 他自己不翻倍 他自己翻倍 我们首先来看看\(1\)操作 如果要满足他对排名没有影响,那么不能进行 ...
- mysql 5.7分组报错问题 Expression #1 of ORDER BY clause is not in GROUP BY clause 的问题 MySQL
解决方案: select version(),@@sql_mode;SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); ...
- java实验报告&第三周学习总结
实验报告: 实验1:求水仙花数在C语言中求水仙花数是一个复杂且长的代码,在java中可以通过简单的代码来实现操作,找出水仙花数: 图例如下: 试验2:求13+23-33+43-53.........9 ...
- C#调用windows API实现 smallpdf客户端程序进行批量压缩
一.背景 Smallpdf 网站针对PDF文件提供了非常齐全的功能:PDF 与 Word.PPT.Excel.JPG 的相互转化.PDF 的压缩.编辑.合并.分割.解密.加密等功能,用户无需注册即可免 ...
- nginx请求转发配置
以下为无ssl证书配置的请求转发 server { listen ; server_name api.****.com; #以下为指定请求域名匹配到某一个端口 #location ~* /union ...
- RabbitMQ使用(下)
RabbitMQ从信息接收者角度可以看做三种模式,一对一,一对多(此一对多并不是发布订阅,而是每条信息只有一个接收者)和发布订阅.其中一对一是简单队列模式,一对多是Worker模式,而发布订阅包括发布 ...
- python3--udp/TCP笔记和实践
UDP协议: UDP (User Datagram Protocol, 用户数据报协议) 是一种无连接,不可靠,基于数据的传输层通信协议. UDP的通信过程与TCP相比比较为简单, 不需要复杂的三次握 ...
- (已实践)PLSQL本地还原Oracle数据库dmp文件
这个方法很烂,导致重装Oracle时候处处出现问题,不建议使用这个方法,除非你以后不再用Oracle这个软件了,这个方法很烂,再评论一下. 第一,启动服务,(如果数据库处于启动状态,那么略过这一步) ...
- SOAP详解(转)
1. SOAP简介 1.1应用背景 对于应用程序开发来说,使程序之间进行因特网通信是很重要的.目前的应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是 H ...