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 ...
随机推荐
- MySQL_DDL操作
简单的来说DLL就是对数据库的C(Create)R(Retrieve)U(Update)D(Delete) 1.数据库的创建 (1)创建:create database 数据库名:当数据库已经存在则会 ...
- Oracle诊断:drop table失败[转]
转: From <http://blog.csdn.net/cyxlxp8411/article/details/7775113> 今天在drop一张表的时候报ORA-00054错误 SQ ...
- Linux高级调试与优化——信号量机制与应用程序崩溃
背景介绍 Linux分为内核态和用户态,用户态通过系统调用(syscall)进入内核态执行. 用户空间的glibc库将Linux内核系统调用封装成GNU C Library库文件(兼容ANSI &am ...
- hibernate映射简单实例
1创建数据库: --班级表 create table grade ( gid number primary key, --班级ID gname varchar2(50), --班级名称 gdesc v ...
- Java基础之comparator和comparable的区别以及使用
Java基础之comparator和comparable的区别以及使用 1: 区别: .Comparable类需要实现此接口,定义在类内,不利于扩展 2 .Comparator更灵活,可以随时自定义 ...
- CV-会议
摘自:https://blog.csdn.net/zhaomengszu/article/details/7834738 中国计算机学会推荐国际学术会议(人工智能与模式识别) 一.A类 序号 会议简称 ...
- 测开之路一百四十三:ORM框架之SQLAlchemy模型及表创建
基于前一篇内容,可以使用模型的结构 目录结构 main,入口层 from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy app = ...
- Debian或者Ubuntu中安装secureCRT/secureFX
1.官网下载 ubuntu 下的 xx.deb安装包.此处使用的安装包是scrt-sfx-8.5.4-1942.ubuntu16-64.x86_64.deb,点击下载,提取码:5em3. 2.安装 d ...
- IntelliJ IDEA 2019.1.1 maven框架web.xml中web-app版本过低导致不能正常使用EL表达式的解决方案
1.软件版本 IDEA版本:IntelliJ IDEA 2019.1.1 maven版本:apache-maven-3.6.1 Tomcat版本:tomcat-8.5 2.问题描述 IDEA使用如下 ...
- C++——堆、栈与内存管理
简介 Stack,是存在于某作用域(scope) 的一块内存空间(memory space).例如当你调用函数,函数本身即会形成一个stack 用來放置它所接收的参数,以及返回地址.在函数本体(fun ...