这里会通过与Java比较的方式来说明scala是如何创建类的。

先来看一下Java中是如何定义一个类的:

  1. public class Car {
  2.  
  3. private final int year;
  4. private int miles;
  5.  
  6. public Car(int yearOfMake) {
  7. year = yearOfMake;
  8. }
  9.  
  10. public int getYear() {
  11. return year;
  12. }
  13.  
  14. public int getMiles() {
  15. return miles;
  16. }
  17.  
  18. public void drive(int distance) {
  19. miles += Math.abs(distance);
  20. }
  21. }

很简单的一个Java类,有两个成员变量、一个构造器以及三个普通方法。在构造器中为final型的成员变量year赋了值。

看一下如何使用scala做到同样的事情:

  1. class Car(val year: Int) {
  2. private var milesDriven: Int = 0
  3.  
  4. def miles() = milesDriven
  5.  
  6. def drive(distance: Int) {
  7. milesDriven += Math.abs(distance)
  8. }
  9. }

可以看到使用scala定义类的同时也完成了构造器的创建,方法的定义也是一如既往的简洁。

使用一下这个类,尝试做个输出:

  1. val car = new Car (2009)
  2. println ("Car made in year " + car.year)
  3. println ("Miles driven " + car.miles)
  4. println ("Drive for 10 miles")
  5. car.drive (10)
  6. println ("Miles driven " + car.miles)

执行结果:

今天的内容好少——因为好困,所以就学了这么一点点。

######

scala学习手记11 - 类定义的更多相关文章

  1. scala学习手记13 - 类继承

    在scala里,类继承有两点限制: 重写方法需要使用override关键字: 只有主构造函数才能往父类构造函数中传参数. 在java1.5中引入了override注解,但不强制使用.不过在scala中 ...

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

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

  3. scala学习手记18 - Any和Nothing

    Any 前面已经有两次提到过:在scala中,Any类是所有类的超类. Any有两个子类:AnyVal和AnyRef.对应Java直接类型的scala封装类,如Int.Double等,AnyVal是它 ...

  4. scala学习手记12 - 字段、方法和构造函数

    在上一节创建了一个scala类,如果没有更多的方法,scala类的定义还可以更简单一些,看一下下面这个CreditCard类的定义: class CreditCard(val number: Int, ...

  5. scala学习手记10 - 访问修饰符

    scala的访问修饰符有如下几个特性: 如果不指定访问修饰符,scala默认为public: 较之Java,scala对protected的定义更加严格: scala可以对可见性进行细粒度的控制. s ...

  6. Scala学习随笔——深入类和对象

    函数化对象(又称方程化对象)指的是所定义的类或对象不包含任何可以修改的状态. 本篇随笔就是着重记录函数化对象.定义了一个有理数类定义的几个不同版本,以介绍 Scala 类定义的几个特性:类参数和构造函 ...

  7. scala学习手记9 - =和==

    = 赋值运算 scala的赋值运算和java的有着很大的不同.如a=b这样的赋值运算,在Java中返回值是a的值,在scala中返回的则是Unit(Unit是值类型,全局只存在唯一的值,即(),通常U ...

  8. scala学习手记6 - 字符串与多行原始字符串

    scala中的字符串类就是java中的java.lang.String类.不过scala也为String提供了一个富封装类:scala.runtime.RichString. scala可以将java ...

  9. scala学习手记3 - var和val

    scala中用var和val定义变量都是可以的. 用val定义的变量是不可变的,被初始化后值就固定下来,不可以再被修改(这类似于java中的final关键字):用var定义的变量是可变的,可以任意修改 ...

随机推荐

  1. k近邻算法python实现 -- 《机器学习实战》

    ''' Created on Nov 06, 2017 kNN: k Nearest Neighbors Input: inX: vector to compare to existing datas ...

  2. Powershell实现Telnet Port

    Telnet Port 脚本 $servers = get-content D:\ps\ServerIPAddress.TXT $portToCheck = '80' for($i=1;$i -le ...

  3. Create a Group Policy Central Store

    一.How to create a Group Policy Central Store You have downloaded or created your own Group Policy Ad ...

  4. Java基础语法 - 面向对象 - 局部变量

    如果在一个成员方法内定义一个变量,那么这个变量就被称为局部变量. 局部变量在方法执行时被创建,在方法执行结束时被销毁.局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误 package m ...

  5. shell正则式解析身份证和手机号

    cat test2.html | sed -e 's/\(^\|[^0-9]\)\(13[0-9][0-9]\{8\}\|14[579][0-9]\{8\}\|15[0-3,5-9][0-9]\{8\ ...

  6. tomcat 介绍

    Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开发 ...

  7. qt下通过socket传送中文

    zz 1.在main函数里我之前就加了一句QTextCodec::setCodecForTr( QTextCodec::codecForLocale() ); 现在再加一句QTextCodec::se ...

  8. webdriver的API

    基本API 1.页面刷新    driver.fresh() 2.页面切换   driver.back().  driver.forward() 3.设置窗口大小    driver.set_wind ...

  9. oracle external密码验证

    什么是external密码验证 当OS user 中存在和DB user 同名的用户时   直接使用和DB user 同名的OS user 可以不输入密码直接登录数据库, [oracle@zxrac1 ...

  10. Poj 1755Triathlon 未Ac,先mark

    地址:http://poj.org/problem?id=1755 题目: Triathlon Time Limit: 1000MS   Memory Limit: 10000K Total Subm ...