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)类的更多相关文章

  1. [Scala]Scala学习笔记四 类

    1. 简单类与无参方法 class Person { var age = 0 // 必须初始化字段 def getAge() = age // 方法默认为公有的 } 备注 在Scala中,类并不声明为 ...

  2. Scala学习笔记——样本类和模式匹配

    1.样本类 在申明的类前面加上一个case修饰符,带有这种修饰符的类被称为样本类(case class). 被申明为样本类的类的特点:1.会添加和类名一致的工厂方法:2.样本类参数列表中的所有参数隐式 ...

  3. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  4. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

  5. Java学习笔记——File类之文件管理和读写操作、下载图片

    Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...

  6. python学习笔记4_类和更抽象

    python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...

  7. Java学习笔记之---类和对象

    Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态  例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...

  8. UML学习笔记:类图

    UML学习笔记:类图 有些问题,不去解决,就永远都是问题! 类图 类图(Class Diagrame)是描述类.接口以及它们之间关系的图,用来显示系统中各个类的静态结构. 类图包含2种元素:类.接口, ...

  9. scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类

    一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person ...

随机推荐

  1. TTTTTTTTTTTTTTTTT HDU 2586 How far away LCA的离线算法 Tarjan

    链接: How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  2. k8s安装报错 Error: unknown flag: --experimental-upload-certs

    今天安装k8sV1.16的版本时候,执行突然发现命令不对,之前安装V1.15的时候是可以的,可能是版本升级的原因. 解决: unknown flag: --experimental-upload-ce ...

  3. OverFeat:基于卷积网络的集成识别、定位与检测

    摘要:我们提出了一个使用卷积网络进行分类.定位和检测的集成框架.我们展示了如何在ConvNet中有效地实现多尺度和滑动窗口方法.我们还介绍了一种新的深度学习方法,通过学习预测对象边界来定位.然后通过边 ...

  4. 从Java中的length和length()开始

    1.在没有IDE自动补齐的情况下,怎样得到数组的长度?怎样得到字符串的长度? int[] arr = new int[3]; System.out.println(arr.length);//leng ...

  5. Linux小记 -- 更新系统软件包

    系统信息 操作系统:Ubuntu 18.04.2 LTS 内核版本:4.15.0-51-generic 何时需要更新 重新启动Ubuntu发现如下motd(message of tody),此时需要更 ...

  6. 多网卡情况下接收udp组播

    多网卡下接收udp组播 往往会接收失败 因为用错了网卡 例如我想要接收2网段 其他电脑出的udp组播  我电脑有有线网和wifi在window下可以这样 route add 230.0.0.1 mas ...

  7. ffmpeg摄像头推流

    ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v z ...

  8. leetcode-mid-sorting and searching - 33. Search in Rotated Sorted Array

    mycode class Solution(object): def search(self, nums, target): """ :type nums: List[i ...

  9. Hibernate一级缓存之懒加载问题

    Hibernate的懒加载: 当用到数据的时候才向数据库查询,这就是hibernate的懒加载特性. 目的,为提高程序执行效率. 查询操作:get()方法/load()方法 (1)get()方法,及时 ...

  10. Python深度学习读书笔记-6.二分类问题

    电影评论分类:二分类问题   加载 IMDB 数据集 from keras.datasets import imdb (train_data, train_labels), (test_data, t ...