modify
This commit is contained in:
parent
1a20819736
commit
380c25d3a0
10
README.md
10
README.md
@ -141,21 +141,13 @@ TODO
|
|||||||
## 十二、Scala
|
## 十二、Scala
|
||||||
|
|
||||||
1. [Scala简介及开发环境配置](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala简介及开发环境配置.md)
|
1. [Scala简介及开发环境配置](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala简介及开发环境配置.md)
|
||||||
|
|
||||||
2. [基本数据类型和运算符](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala基本数据类型和运算符.md)
|
2. [基本数据类型和运算符](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala基本数据类型和运算符.md)
|
||||||
|
|
||||||
3. [流程控制语句](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala流程控制语句.md)
|
3. [流程控制语句](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala流程控制语句.md)
|
||||||
|
|
||||||
4. [数组——Array](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala数组.md)
|
4. [数组——Array](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala数组.md)
|
||||||
|
|
||||||
5. [集合类型综述](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala集合类型.md)
|
5. [集合类型综述](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala集合类型.md)
|
||||||
|
|
||||||
6. [常用集合类型之——List & Set](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala列表和集.md)
|
6. [常用集合类型之——List & Set](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala列表和集.md)
|
||||||
|
|
||||||
7. [常用集合类型之——Map & Tuple](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala映射和元组.md)
|
7. [常用集合类型之——Map & Tuple](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala映射和元组.md)
|
||||||
|
8. [Scala类和对象](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala类和对象.md)
|
||||||
8. [Scala类和对象](https://github.com/heibaiying/BigData-Notes/blob/master/notes/ScalaScala类和对象.md)
|
|
||||||
|
|
||||||
9. [Scala继承和特质](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala继承和特质.md)
|
9. [Scala继承和特质](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Scala继承和特质.md)
|
||||||
|
|
||||||
|
|
@ -75,6 +75,8 @@ object Person {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
## 二、类
|
## 二、类
|
||||||
|
|
||||||
### 2.1 成员变量可见性
|
### 2.1 成员变量可见性
|
||||||
@ -246,7 +248,7 @@ class Person() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
## 三、对象
|
## 三、对象
|
||||||
|
|
||||||
@ -398,7 +400,7 @@ true
|
|||||||
6:PINK
|
6:PINK
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
## 参考资料
|
## 参考资料
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
### 1.1 Scala中的继承结构
|
### 1.1 Scala中的继承结构
|
||||||
|
|
||||||
scala中继承关系如下图:
|
Scala中继承关系如下图:
|
||||||
|
|
||||||
+ Any是整个继承关系的根节点;
|
+ Any是整个继承关系的根节点;
|
||||||
+ AnyRef包含Scala Classes和Java Classes,等价于Java中的java.lang.Object;
|
+ AnyRef包含Scala Classes和Java Classes,等价于Java中的java.lang.Object;
|
||||||
@ -38,23 +38,17 @@ Scala的集成机制和Java有很多相似之处,比如都使用`extends `关
|
|||||||
//父类
|
//父类
|
||||||
class Person {
|
class Person {
|
||||||
|
|
||||||
|
|
||||||
var name = ""
|
var name = ""
|
||||||
|
|
||||||
// 1.不加任何修饰词,默认为public,能被子类和外部访问
|
// 1.不加任何修饰词,默认为public,能被子类和外部访问
|
||||||
var age = 0
|
var age = 0
|
||||||
|
|
||||||
// 2.使用protected修饰的变量能子类访问,但是不能被外部访问
|
// 2.使用protected修饰的变量能子类访问,但是不能被外部访问
|
||||||
protected var birthday = ""
|
protected var birthday = ""
|
||||||
|
|
||||||
// 3.使用private修饰的变量不能被子类和外部访问
|
// 3.使用private修饰的变量不能被子类和外部访问
|
||||||
private var sex = ""
|
private var sex = ""
|
||||||
|
|
||||||
|
|
||||||
def setSex(sex: String): Unit = {
|
def setSex(sex: String): Unit = {
|
||||||
this.sex = sex
|
this.sex = sex
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4.重写父类的方法建议使用override关键字修饰
|
// 4.重写父类的方法建议使用override关键字修饰
|
||||||
override def toString: String = name + ":" + age + ":" + birthday + ":" + sex
|
override def toString: String = name + ":" + age + ":" + birthday + ":" + sex
|
||||||
|
|
||||||
@ -131,7 +125,7 @@ object ScalaApp extends App {
|
|||||||
|
|
||||||
### 1.5 构造顺序和提前定义
|
### 1.5 构造顺序和提前定义
|
||||||
|
|
||||||
#### 1. 构造顺序
|
#### **1. 构造顺序**
|
||||||
|
|
||||||
在Scala中还有一个需要注意的问题,如果你在子类中重写父类的val变量,并且超类的构造器中使用了该变量,那么可能会产生不可预期的错误。下面给出一个示例:
|
在Scala中还有一个需要注意的问题,如果你在子类中重写父类的val变量,并且超类的构造器中使用了该变量,那么可能会产生不可预期的错误。下面给出一个示例:
|
||||||
|
|
||||||
@ -165,7 +159,7 @@ object ScalaApp extends App {
|
|||||||
()
|
()
|
||||||
```
|
```
|
||||||
|
|
||||||
实际上array被初始化为Array(0),原因在于父类的构造器的执行先于子类的构造器,这里给出实际的执行步骤:
|
可以看到array被初始化为Array(0),主要原因在于父类构造器的执行顺序先于子类构造器,这里给出实际的执行步骤:
|
||||||
|
|
||||||
1. 父类的构造器被调用,执行`new Array[Int](range)`语句;
|
1. 父类的构造器被调用,执行`new Array[Int](range)`语句;
|
||||||
2. 这里想要得到range的值,会去调用子类range()方法,因为`override val`重写变量的同时也重写了其get方法;
|
2. 这里想要得到range的值,会去调用子类range()方法,因为`override val`重写变量的同时也重写了其get方法;
|
||||||
@ -188,7 +182,7 @@ object Person {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 2. 提前定义
|
#### **2. 提前定义**
|
||||||
|
|
||||||
想要解决上面的问题,有以下几种方法:
|
想要解决上面的问题,有以下几种方法:
|
||||||
|
|
||||||
@ -216,6 +210,8 @@ class Employee extends {
|
|||||||
|
|
||||||
>**注意事项**:不仅是类的继承存在这个问题,后文介绍的特质(trait)的继承也存在这个问题,也同样可以通过提前定义来解决。即便可以通过多种方法解决该问题,但还是建议合理设计继承以规避此类问题。
|
>**注意事项**:不仅是类的继承存在这个问题,后文介绍的特质(trait)的继承也存在这个问题,也同样可以通过提前定义来解决。即便可以通过多种方法解决该问题,但还是建议合理设计继承以规避此类问题。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
## 二、抽象类
|
## 二、抽象类
|
||||||
|
|
||||||
Scala中允许使用`abstract`定义抽象类,并且通过`extends`关键字继承它。
|
Scala中允许使用`abstract`定义抽象类,并且通过`extends`关键字继承它。
|
||||||
@ -252,7 +248,7 @@ class Employee extends Person {
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
## 三、特质
|
## 三、特质
|
||||||
|
|
||||||
@ -399,7 +395,7 @@ class Employee extends Person with InfoLogger with ErrorLogger {...}
|
|||||||
+ ErrorLogger构造器执行;
|
+ ErrorLogger构造器执行;
|
||||||
3. 所有超类和特质构造完毕,子类才会被构造。
|
3. 所有超类和特质构造完毕,子类才会被构造。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
## 参考资料
|
## 参考资料
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user