scala入门教程: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 = new Point(10,20)
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 == 0 && y == 0
}
}
上述代码中的isOriginal后面花括号内的内容是构造函数。
通过this定义的scala构造函数
class Point (val x:Int, val y:Int) {
val isOriginal:Boolean = {
x == 0 && y == 0
}
def this(xArg:Int) {
println("hello, I'm this constructor")
this(xArg,0)
}
}
如上述代码定义了一个只有一个参数的构造函数,这个构造函数调用了默认的构造函数,传了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 = new TalkPoint(0,0)
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方法:
object App {
def main(args : Array[String]) {
val p = new HappyTalkPoint(0,0)
p.talk()
}
}
运行程序将会输出:
I'm happy
my position is (0,0)
scala入门教程:scala中的面向对象定义类,构造函数,继承的更多相关文章
- Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现
前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...
- scala中的面向对象定义类,构造函数,继承
我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...
- 《挑战30天C++入门极限》入门教程:C++中的const限定修饰符
入门教程:C++中的const限定修饰符 const修饰符可以把对象转变成常数对象,什么意思呢? 意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用! ...
- js中使用function定义类、实例化,函数的调用方法
function Test002(name, age){ name, age, this.printInfo = function(){ //定义的公有方法 console.log(name, age ...
- Java面向对象-Java类的继承及super关键字
Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...
- php面向对象:类的继承实例讲解
什么是类的继承?说白了,我觉得就是提高代码使用效率的.下面我就给大家介绍下继承.大理石平台维修 类的继承概念 子类继承父类的所有成员变量个方法,包括构造方法,当子类被实例化时,php会现在子类中查询构 ...
- Scala入门教程---《chang哥教你一天搞定Scala》
<chang哥教你一天搞定Scala> /** * <chang哥教你一天搞定Scala> * scala是一门多范式编程语言,集成了面向对象编程和函数式编程等多种特性. * ...
- 【PHP面向对象(OOP)编程入门教程】23.自动加载类 __autoload()函数
很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在 ...
- 22.python中的面向对象和类的基本语法
当我发现要写python的面向对象的时候,我是踌躇满面,坐立不安呀.我一直在想:这个坑应该怎么爬?因为python中关于面向对象的内容很多,如果要讲透,最好是用面向对象的思想重新学一遍前面的内容.这个 ...
随机推荐
- random模块
如下 #!/usr/bin/env python # encoding: utf-8 import sys import platform print (platform.python_version ...
- [poj2406] Power Strings
Description 对于两个字符串a,b,定义a×b为将b接到a的末尾组成新的字符串.对于一个字符串a的幂运算的定义与我们在数学中的定义一样:a0=''(空字符),an+1=an×a. Input ...
- 【poj1738】 An old Stone Game
http://poj.org/problem?id=1738 (题目链接) 题意 一排n堆石子,合并两堆石子的代价为两堆石子总数之和.问将所有石子合并为一堆所需要的最小代价. Solution 本来想 ...
- poj1113 凸包
result=对所有点凸包周长+pi*2*L WA了一次,被Pi的精度坑了 以后注意Pi尽可能搞精确一点.Pi=3.14还是不够用 Code: #include<vector> #incl ...
- 洛谷P1168 中位数
题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[2], …, A[2k - 1]的中位数.[color=red]即[/color] ...
- [NOIP2015] 提高组 洛谷P2678 跳石头
题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不 ...
- ubuntu 设置 NAT 转发
针对需求: 嵌入式开发中,经常使用板子和笔记本通过网线直连,如果需要板子连接到外网,就比较尴尬. 最简单方法,可以把板子接到局域网内,我们的笔记本通过局域网交换机连接到板子,可是,这样要很多修改 IP ...
- Objective-C NSData与实现NSCoding协议进行序列化和反序列化
1.NSData NSData是Objective-C语言中数据的基本类型,其成分可以理解为字节指针和长度的封装的类,来看看源代码 @interface NSData : NSObject <N ...
- Myeclipse的show in breadcrumb
m如何取消eclipse的show in breadcrumb 不小心点了show in breadcrumb,在编辑器界面上面多一层路径条,多余碍事,不晓得怎么取消,搞了半天终于弄好,方法如下: 点 ...
- android播放器如何获取音乐文件信息
转http://blog.csdn.net/hellofeiya/article/details/8464356, android自带的音乐播放器中,在获取音乐文件信息的时候是通过扫描得到相关信息的. ...