java程序员学习scala前必看的技术文档(2)
来源:互联网 发布:数据监控系统 开源 编辑:程序博客网 时间:2024/06/09 16:31
这篇文章是参考其他博客,并加了一些自己的理解和注释
源博客地址:https://www.iteblog.com/archives/1325.html
XML Code
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package com.lyzx.day01
class T3 {
def f1(): Unit ={
//显示虚部im后面必须加(),因为在定义时im是一个函数
val c = new Complex(1.2, 3.4)
println("imaginary part: " + c.im())
}
def f2(): Unit ={
val c =new NewComplex(1.2,4.5)
//显示虚部im不需要加(),因为在定义时没有加()
println("虚部是:"+c.im)
}
def f3(): Unit ={
var c1 = new Complex(22,3.4)
var c2 = new Complex_toString(22,3.4)
println("未覆盖toString方法:"+c1)
println("覆盖了toString方法:"+c2)
}
}
class Complex(real: Double, imaginary: Double) {
def re() = real
def im() = imaginary
}
class NewComplex(real: Double, imaginary: Double) {
def re = real
def im = imaginary
}
class Complex_toString(real: Double, imaginary: Double) {
def re = real
def im = imaginary
override def toString() =
"" + re + (if (im < 0) "" else "+") + im + "i"
}
/**
* 二:Scala类
* 正如我们所见,Scala是一门面向对象的语言,因此它拥有很多关于“类”的描述 。
* Scala类使用和Java类似的语法进行定义。
* 但是一个重要的不同点在于Scala中的类可以拥有参数,例如:Complex
* 我们的复数类(Complex)接受两个参数:实部和虚部。这些参数必须在实例化时进行传递,
* 就像这样:new Complex(1.5, 2.3)。
* 类定义中包括两个叫做re和im的方法,分别接受上面提到的两个参数。
* 值得注意的是这两个方法的返回类型并没有显式的声明出来。他们会被编译器自动识别。
* 在本例中他们被识别为Double 但是编译器并不总是像本例中的那样进行自动识别。
* 不幸的是关于什么时候识别,什么时候不识别的规则相当冗杂。
* 在实践中这通常不会成为一个问题,因为当编译器处理不了的时候会发出相当的抱怨。
* 作为一个推荐的原则,
* Scala的新手们通常可以试着省略类型定义而让编译器通过上下文自己判断。
* 久而久之,新手们就可以感知到什么时候应该省略类型,什么时候不应该。
*
* 1.1 无参方法
* 关于方法re和im还有一个小问题:你必须在名字后面加上一对括号来调用它们。
* eg:T3.f1()
*
* 1.2 继承和覆盖
* Scala中的所有类都继承一个父类,当没有显示声明父类时(就像上面定义的Complex一样),
* 它们的父类隐形指定为scala.AnyRef。
* 在子类中覆盖父类的成员是可能的。但是你需要通过override修饰符显示指定成员的覆盖。
* 这样的规则可以避免意外覆盖的情况发生。作为演示,
* 我们在Complex_toString的定义中覆盖了Object的toString方法。
*
*/
object T3{
def main(args: Array[String]) {
val t3 = new T3
//t3.f1()
// t3.f2()
t3.f3()
}
}
class T3 {
def f1(): Unit ={
//显示虚部im后面必须加(),因为在定义时im是一个函数
val c = new Complex(1.2, 3.4)
println("imaginary part: " + c.im())
}
def f2(): Unit ={
val c =new NewComplex(1.2,4.5)
//显示虚部im不需要加(),因为在定义时没有加()
println("虚部是:"+c.im)
}
def f3(): Unit ={
var c1 = new Complex(22,3.4)
var c2 = new Complex_toString(22,3.4)
println("未覆盖toString方法:"+c1)
println("覆盖了toString方法:"+c2)
}
}
class Complex(real: Double, imaginary: Double) {
def re() = real
def im() = imaginary
}
class NewComplex(real: Double, imaginary: Double) {
def re = real
def im = imaginary
}
class Complex_toString(real: Double, imaginary: Double) {
def re = real
def im = imaginary
override def toString() =
"" + re + (if (im < 0) "" else "+") + im + "i"
}
/**
* 二:Scala类
* 正如我们所见,Scala是一门面向对象的语言,因此它拥有很多关于“类”的描述 。
* Scala类使用和Java类似的语法进行定义。
* 但是一个重要的不同点在于Scala中的类可以拥有参数,例如:Complex
* 我们的复数类(Complex)接受两个参数:实部和虚部。这些参数必须在实例化时进行传递,
* 就像这样:new Complex(1.5, 2.3)。
* 类定义中包括两个叫做re和im的方法,分别接受上面提到的两个参数。
* 值得注意的是这两个方法的返回类型并没有显式的声明出来。他们会被编译器自动识别。
* 在本例中他们被识别为Double 但是编译器并不总是像本例中的那样进行自动识别。
* 不幸的是关于什么时候识别,什么时候不识别的规则相当冗杂。
* 在实践中这通常不会成为一个问题,因为当编译器处理不了的时候会发出相当的抱怨。
* 作为一个推荐的原则,
* Scala的新手们通常可以试着省略类型定义而让编译器通过上下文自己判断。
* 久而久之,新手们就可以感知到什么时候应该省略类型,什么时候不应该。
*
* 1.1 无参方法
* 关于方法re和im还有一个小问题:你必须在名字后面加上一对括号来调用它们。
* eg:T3.f1()
*
* 1.2 继承和覆盖
* Scala中的所有类都继承一个父类,当没有显示声明父类时(就像上面定义的Complex一样),
* 它们的父类隐形指定为scala.AnyRef。
* 在子类中覆盖父类的成员是可能的。但是你需要通过override修饰符显示指定成员的覆盖。
* 这样的规则可以避免意外覆盖的情况发生。作为演示,
* 我们在Complex_toString的定义中覆盖了Object的toString方法。
*
*/
object T3{
def main(args: Array[String]) {
val t3 = new T3
//t3.f1()
// t3.f2()
t3.f3()
}
}
阅读全文
0 0
- java程序员学习scala前必看的技术文档(2)
- java程序员学习scala前必看的技术文档(1)
- java程序员学习scala前必看的技术文档(3)
- 学习编写java类的技术文档
- Java程序员的Scala入门教程
- 程序员的量化交易之路(2)----Esper文档学习之技术概览(1)
- 程序员的量化交易之路(2)----Esper文档学习之技术概览(1)
- Scala学习文档
- Java程序员的Scala的入门教程
- 写给 Java 程序员的 Scala 教程
- 程序员编写技术文档的新手指南
- Java学习笔记程序员最常用的20%技术
- Scala学习6之scala与java的不同之总结2-重写override
- 学习scala的点点滴滴(2)-与java交互
- Java程序员 的技术方向
- 为Java程序员编写的Scala的入门教程
- 为Java程序员编写的Scala的入门教程
- 为Java程序员编写的Scala的入门教程
- -source 7 或更高版本以允许 switch 中存在字符串
- idea中pom如何加载jar包依赖
- APT 1004 Counting Leaves (30)
- typecho install.phpl漏洞分析
- 深度学习中的Attention模型介绍及其进展
- java程序员学习scala前必看的技术文档(2)
- CentOS7上elasticsearch5.0启动失败
- Flask框架项目实例:**租房网站(一)
- 基于Python数据分析与机器学习案例实战教程
- Active SLAM 主动SLAM
- usb host发送数据api使用
- jquery-获取table值
- QT32位静态编译库生成
- Day14—日期相关类、集合类、List集合(接口)