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中关于面向对象的内容很多,如果要讲透,最好是用面向对象的思想重新学一遍前面的内容.这个 ...
随机推荐
- Maven项目加载JAR包
登陆网站找jar包:http://mvnrepository.com/ 1.http://mvnrepository.com/artifact/net.sf.jxls/jxls-core/1.0.6 ...
- 虚拟机克隆后找不到eth0
使用 VMware 虚拟机的克隆功能,快速复制已安装好的 Linux 系统. 克隆完成之后,发现没有 eth0 网卡. [解决方法] 1. 编辑 /etc/udev/rules.d/70-persis ...
- centos7 建立虚拟目录
一.安装mysql,直接用yum安装即可,mysql在centos7.0版本中被mariadb替代了. 命令: yum install mysql-server mysql 安装好了,选择修改mysq ...
- PTA fzu_oop_east
GitHub链接: 传送门 5-1该日是该年的第几天 定义一个日期类Date,内有数据成员年.月.日,另有成员函数:构造函数用于初始化数据成员,输出,闰年的判断. 编写主函数:创建日期对象,计算并输出 ...
- ASP.NET WEB API 测试
编码时测试: Postman + Fiddler4 Postman进行发包 Fiddler4进行抓包 编码结束后测试: 通过Nuget引入组件WebApiTestClient: 接口文档 类属性 测试
- JavaScript 的错误(Error)与异常(Exception)处理
PHP很少用到错误处理,因为框架帮了大忙,所以基本上没有主动接手过PHP的错误.PHP是偏后端的动态处理语言,和用户的关系不大,所以用户不会关心是否出现了报错.但是JavaScript就非常不同了,j ...
- segmentfault.com mongo出识以及对数组的操作
https://segmentfault.com/a/1190000003951602 首先推荐个工具,no-sql-manager-for-mongodb-professional,虽然收费,但是每 ...
- 电脑中的Bois是什么
电脑中的Bois是什么 BOIS= Basic Input/Output System,基本输入输出系统,全称是ROM-BOIS,是只读存储器基本输入/输出系统的简写,它实际是一组被固化到电脑中,为电 ...
- Java多线程系列
一.参考文献 1.:Java多线程系列目录 (一) 基础篇 01. Java多线程系列--“基础篇”01之 基本概念 02. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式 03. ...
- js与php转换时间戳
php时间:1368524732 js代码: function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleStri ...