Scala快速入门(三)——类与对象

一、类

这边类的模板如下,和Java很像

object a {def main(args: Array[String]): Unit = {val person=new Personprintln(person.name+" "+person.age)}
}
class Person{var name:String = "steve yu"var age = 10
}

遇到不确定的成员属性,最好不要赋值null,可赋值一个下划线,需要标明类型。下划线Int型代表0,Double代表0.0,boolean代表false,对象代表null,这样解决所有问题。

改进后:

class Person{var name:String = _var age:Int = _
}

二、创建对象和方法

1.对象的创建

我们可以加括号,也可以不加
val p=new Person
val p=new Person()
这两种都可以,用var还是val,官方推荐使用val

2.方法

和函数的创建一模一样

3.构造器

  def this(name:String,age:Int){thisthis.name=namethis.age=age}

4.主构造器,3上的构造器并非主构造器,class后面的Person是主构造器,直接加括号,跟参数,即可写一个构造函数

class Person(){var name:String = _var age:Int = _def this(name:String,age:Int){thisthis.name=namethis.age=age}
}

5.构造器的私有

  • 主构造器的私有化
class Person private(){}
  • 其他构造器的私有化
  private def this(name:String,age:Int){thisthis.name=namethis.age=age}
  • 构造器的高级运用(inname使用val修饰,那么inname就是一个只读变量)
class Person (val inname:String){var name=inname
}

三、包

1.相同名字class进行分包处理

object Test {def main(args: Array[String]): Unit = {val tiger1=new com.littlepage.scalapackage.steve.Tigerval tiger2=new com.littlepage.scalapackage.yu.Tiger}
}

2.scala包可以任意改变package,并且,在package改变后,能够删除之前编译的内容并且重新编译

3.包的引用,首先引用本类,如果使用一样名字的类,需要把名字写全

例子:

val a=new com.littlepage.Tiger

4.包对象

为什么需要包对象。在包中不定义类,直接写方法,就会报错,所以,我们需要一个包对象技术

package object people{//定义一个包对象
}

5.使用包对象进行调用函数

object Tiger {def main(args: Array[String]): Unit = {A.print_a}
}package object A{def print_a: Unit ={println("a")}
}

如果你的这个伴生类在A的package里面,可以直接进行调用

package A{object Tiger {def main(args: Array[String]): Unit = {print_a}}
}

我们反编译这段代码,发现这个package实际是一个final的class,中间有个静态的MODULE$对象

包对象注意点:
1.每个包只有一个包对象
2.包对象的名称需要和包名保持一致

四、访问修饰符

1.属性为默认时,底层看是private的,使用效果是public的

2.方法为默认,默认是public的

3.private为私有权限,只在类内部和伴生对象中可用

4.protected为受保护的,保护权限只能供子类访问,同包无法访问

5.scala中没有public关键字,不能用public 进行修饰属性和方法

注意点:
scala中,我们import一个包中所有的内容应该使用下划线,而不是使用*

作业布置

1.编写一个Time类,加入只读属性hours和minutes,检查某一个时刻是否早于另外一个时刻的方法,before(other:Time):Boolean。Time对象应该以new Time(hrs,min)的方式构建

class Time(val hrs:Int,val min:Int) {val hours:Int=hrsval minutes:Int=mindef before(other:Time):Boolean={if(hours!=other.hours)  hours<other.hourselse minutes<other.minutes}
}

2.编写一段程序,将Java中的HashMap中的所有元素拷贝到Scala的HashMap,用引入语句重命名这两个类。

object Test {import java.util.{HashMap=>JavaHashMap}import collection.mutable.{HashMap=>ScalaHashMap}def main(args: Array[String]): Unit = {val jm=new JavaHashMap[Int,String]jm.put(1,"小舞")jm.put(2,"团团")jm.put(2,"怪兽")jm.put(4,"S.X")val sm=new ScalaHashMap[Int,String]()for(k<-jm.keySet().toArray()){sm.put(k.asInstanceOf[Int],jm.get(k))}println(sm.mkString(" "))}
}

转载于:https://www.cnblogs.com/littlepage/p/11590240.html

Scal(三)——类与对象相关推荐

  1. Java(实验三)类与对象-定义并实现一个长方体类(Cube),包含长(length)、宽(width)与高(height)等三个属性

    一.实验目的: 1.学会定义并实现类. 2.学会定义并创建类的对象,通过类的对象访问类的成员属性与方法. 3.学会定义并实现派生类,学会使用派生类的对象. 4.理解并学会使用类的多态性. 二.实验环境 ...

  2. C++程序设计基础实验-实验三 类和对象

    一. 实验目的 掌握类的定义及实例化 掌握类的几种构造函数和析构函数 掌握类的成员访问控制 二.实验内容 设计点类 Point,能够表示平面当中的任意点 (1)数据成员包括两点坐标(x,y),成员函数 ...

  3. C++(三)——类和对象(上)

    构造函数 #include<iostream> using namespace std;class Person { public:int age;Person() {cout <& ...

  4. 实验三 类与对象(zxt)

    //以下为课上的实现虚数相加的内容,以及我的疑惑(懵逼) 这个代码存在问题,只能运行整数不能运行浮点数,以下为2.0版本 这回的又有一些问题,这个源代码是老师ppt上的,main函数中的部分是我写的. ...

  5. Java: 实训三 类与对象、继承

    1.三角形.梯形和圆形的类封装 编写一个Java应用程序,该程序中有3个类:Trangle.Leder和Circle,分别用来刻画"三角形"."梯形"和&quo ...

  6. 实验三 类和对象

    一.实验内容 1.graph类内容补充 代码如下: #ifndef GRAPH_H #define GRAPH_H// 类Graph的声明 class Graph {public:Graph(char ...

  7. java类对象实验问题_Java类与对象实验答案

    Java类与对象实验答案Tag内容描述: 1.Java实验报告 计科.信工版2013-2014-2 实验报告 一.实验项目:类与对象 二.实验目的: 1. 学会使用类来封装对象的属性和功能 2. 掌握 ...

  8. 使用三种方式创建Class字节码类文件对象

    /*** 使用三种方式创建Class字节码类文件对象** @author silence*/ public class Demo1 {public static void main(String[] ...

  9. java构造方法 隐含三步_Java入门总结--------类和对象关系以及构造方法

    Java中重写父类的方法要遵循"两同两小一大"规则, "两同"即方法名相同.形参列表相同: "两小"指的是子类方法的返回值类型应比父类方法返 ...

最新文章

  1. MySQL学习笔记(六)MySQL8.0 配置笔记
  2. 腾讯爬虫python_Python爬虫,爬取腾讯漫画实战
  3. java.lang.OutOfMemoryError: Java heap space错误和方法(集、转)
  4. Struts2 标签库讲解
  5. shell for while循环
  6. 本周大新闻|PS VR2已确认20款大作,Magic Leap 1低价清库存
  7. 用python制作正态分布图_使用python绘制3维正态分布图的方法
  8. 如何对谷歌地图的火星坐标进行纠偏校正
  9. 印刷业ERP系统解决方案
  10. android intent传文件夹,Android之intent传值篇
  11. java吉他游戏_[Java]吉他谱浏览器 0.1
  12. 移植MT7620A+MT7610E驱动到Openwrt trunk(Linux Kernel 3.14.18)(续:MT7620A)
  13. (三)lvs负载均衡详解--lvs-DR+keepalived配置
  14. Shopee怎么发货?虾皮无货源怎么发货?
  15. 《构建之法》学习总结1——软件工程概论,团队组织及管理,开发流程
  16. SQLServer视图:视图简介
  17. (整理)快速DCT变换
  18. ucsd计算机科学学院,浅谈美国计算机科学专业,真的超牛!
  19. 简账(开源记账软件)-功能介绍
  20. 3896. 【NOIP2014模拟10.26】战争游戏

热门文章

  1. Halcon之图像采集
  2. Arduino 1.44寸st7735s TFT+SD卡显示图片
  3. Invalid character (CR or LF) found in method name
  4. 常见的电脑蓝屏代码和解决方法
  5. 2021-2027全球与中国IEC入口滤波器市场现状及未来发展趋势
  6. 用VISP+Opencv做相机到机械臂的标定
  7. J-Word Search
  8. 身体和灵魂,总得有一个在路上
  9. oracle固定资产结帐,如何控制必须先固定资产模块结帐,才可以总账模块结账。...
  10. Google结构化数据