scala中的面向对象定义类,构造函数,继承
我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言。
定义scala的简单类
class Point (val x:Int, val y:Int)
上面一行代码就是一个scala类的定义:
- 首先是关键字class
- 其后是类名 Point
- 类名之后的括号中是构造函数的参数列表,这里相当于定义了对象的两个常量,其名称分别为x,y,类型都是Int
上面的类和下面的类是一致的,不过更精简了。
class Point (xArg:Int, yArg:Int) {
val x = xArg
val y = yArg
}
我们写一个main方法,看下如何使用这个Point类。
object App {
def main(args : Array[String]) {
val p = ,)
println("point info(" + p.x + "," + p.y + ")")
}
}
在main方法中通过val p = new Point(10,10)来初始化一个Point类的实例,然后就可以访问p.x和p.y字段了。
scala对象的构造函数
只是初始化字段的构造函数
如下Point类示例,在构造函数中初始化了isOrigin,表示此点是否为原点
class Point (val x:Int, val y:Int) {
val isOriginal:Boolean = {
x == && y ==
}
}
上述代码中的isOriginal后面花括号内的内容是构造函数。
通过this定义的scala构造函数
class Point (val x:Int, val y:Int) {
val isOriginal:Boolean = {
x == && y ==
}
def this(xArg:Int) {
println("hello, I'm this constructor")
)
}
}
如上述代码定义了一个只有一个参数的构造函数,这个构造函数调用了默认的构造函数,传了xArg,和0值。这样写的构造函数可以做初始化字段之外的事情。构造函数之间是可以通过this(...)相互调用的。
scala的继承
实现继承
下面我们实现一个Point的继承类TalkPoint这个Point具有可以把自己的坐标打印出来。
class TalkPoint(x:Int, y:Int) extends Point (x,y) {
def talk() = {
println("my position is ("+x+","+y+")")
}
}
上面的TalkPoint类继承于Point,注意它的默认构造函数,x,y之前没有val的修饰,extends Point(x,y) 之后会自动调用基类的构造函数。我们可以通过下面代码,调用这个子类的talk方法
object App {
def main(args : Array[String]) {
val p = ,)
p.talk()
}
}
运行程序将输出:my position is (0,0)
重写基类的方法
下面我们再创建一个TalkPoint的子类,这个类叫HappyTalkPoint,该子类会重写TalkPoint的talk方法。如下代码:
class HappyTalkPoint(x:Int, y:Int) extends TalkPoint(x,y) {
override def talk() = {
println("I'm happy")
super.talk()
}
}
在talk方法的def关键字前面有一个override关键字,来表示重写,这个关键字时必须的,否则编译器会报错;这一点和java中有所不同。在这个方法的实现里面我们先打印出了I'm happy,然后通过super.talk()调用了父类的方法。
我们修改下App类的main方法:
运行程序将会输出:
I'm happy my position ,)
scala中的面向对象定义类,构造函数,继承的更多相关文章
- scala入门教程:scala中的面向对象定义类,构造函数,继承
我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...
- Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现
前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...
- Java面向对象-Java类的继承及super关键字
Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...
- php面向对象:类的继承实例讲解
什么是类的继承?说白了,我觉得就是提高代码使用效率的.下面我就给大家介绍下继承.大理石平台维修 类的继承概念 子类继承父类的所有成员变量个方法,包括构造方法,当子类被实例化时,php会现在子类中查询构 ...
- js中使用function定义类、实例化,函数的调用方法
function Test002(name, age){ name, age, this.printInfo = function(){ //定义的公有方法 console.log(name, age ...
- scala学习笔记2(类,继承,抽象类)
class Person{ // _ 是占位符; var name : String = _ val age : Int = 27 // private[this] 定义的内容无法外部使用,起到保护作 ...
- 22.python中的面向对象和类的基本语法
当我发现要写python的面向对象的时候,我是踌躇满面,坐立不安呀.我一直在想:这个坑应该怎么爬?因为python中关于面向对象的内容很多,如果要讲透,最好是用面向对象的思想重新学一遍前面的内容.这个 ...
- Scala基础:面向对象之对象和继承
对象 object 相当于 class 的单个实例,通常在里面放一些静态的 field 或者 method:在 Scala 中没有静态方法和静态字段,但是可以使用 object 这个语法结构来达到同样 ...
- (数据科学学习手札46)Scala中的面向对象
一.简介 在Scala看来,一切皆是对象,对象是Scala的核心,Scala面向对象涉及到class.object.构造器等,本文就将对class中的重点内容进行介绍: 二.Scala中的类 2.1 ...
随机推荐
- Java面试题总结(二)
43.Java中的两种异常类型是什么?他们有什么区别? Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常.不受检查的异常不需要在方法或者是构造函数上声明,就算 ...
- Ubuntu/Mint更换阿里云源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份 sudo vim /etc/apt/sources.list #修改 sudo ...
- WebView与JS的几种交互
http://www.jianshu.com/p/0042d8eb67c0 最近整理了一下原生与H5之间的交互方式,简单的做个总结.OC端与JS的交互,大致有这几种:拦截协议.JavaScriptCo ...
- 交换机--Switch
交换机(Switch)意为"开关"是一种用于电(光)信号转发的网络设备.它可以为接入交换机的任意两个网络节点提供独享的电信号通路.最常见的交换机是以太网交换机. 这里的" ...
- Join Attributes
1. IWorkspaceFactory2 workspaceFactory = new ShapefileWorkspaceFactoryClass() as IWorkspaceFactory2; ...
- session生命周期(一)
Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Session在用户访问第一次访问服务器时创建,需要注意只有访问JSP.Servlet等程序时才会创建Session,只访问 ...
- APP注释代码
<meta name="viewport" content="width=device-width,height=device-height,inital-scal ...
- PHP Object 转 Array,Json 转 Array
object 转 array /** * object 转 array */ function object_to_array($obj){ $_arr = is_object($obj)? get_ ...
- MySQL关键字
MySQL关键字 ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL ...
- Windows环境配置HTTP服务(Windows + Apache + Mysql + PHP)
1.安装WampServer 2.管理HTTP服务 任务图标绿色为正常启动状态 注意事项:1.检查网络是不是通的 ping 对方IP2.检查防火墙是否开启,如果开启将不能正常被访问3.检查访问权限 A ...