scala(三)

面向对象编程

1.基础面向对象编程

1.1 包

1. 可以让源码文件中多次使用package关键字
2. 源码物理路径和包名没有关系,就算报名不对,一样可以执行
3. 明确包的作用域,可以在package关键字的后面增加大括号
4. 同一个源码中,子包中可以直接访问父包中的内容
5. scala可以将包当成对象来用,可以直接声明属性和方法

1.2 import

1. 星号在scala中有特殊用于,所以不能使用在import语法中,需要采用特殊符号:下划线

import java.util._

2. import关键字可以在任何地方使用

import java.util.Date
new Date()
导入Date时容易造成歧义

3. 可以在一行中导入同一个包中多个类并且可以给类起别名

import java.util.{ArrayList, List, LinkedList}
new ArrayList()
import java.util.{HashMap=>JavaHashMap}
println(new JavaHashMap())

4. 导包,而不是导类

import java.util
new util.ArrayList()

5.Scala中可以屏蔽某个包中的类

import java.util._
import java.sql.{Date=>_, _}   //java.sql包中屏蔽Date日期类
new Date()

6. scala中导入类的操作,是以相对路径(当前包路径)的方式导入的。如果想要使用绝对路径的方式,那么需要增加特殊操作:root

new _root_.java.util.HashMap()

1.3 类

Scala中一个源文件中可以声明多个公共类

// 声明类:访问权限 class 类名 { 类主体内容 } 
class User {
    // 类的主体内容
}
// 对象:new 类名(参数列表)
new User()

1.3 属性

所谓的属性,其实就是类中的变量
在编译时,编译器会将变量编译为类的(私有的)属性,同时提供了属性对应的set,get方法
val test = new Test()
给类的属性赋值,等同于调用对象属性的set方法
test.name = "lisi"
访问类的属性时,等同于调用对象属性的get方法
println(test.name)
使用 val声明的类的变量,取值不能修改
val声明的属性,在编译时,会给属性添加final关键字,编译器不会提供属性的set方法
test.age = 20
scala中变量必须显示地初始化
如果希望类的属性和java一样可以由系统进行初始化,而是手动赋值,可以采用特殊符号:下划线

java bean规范
反射一般用于架构设计,而架构设计的目的就是通用化
scala中给属性提供的set,get方法不遵循bean规范
sql => cols => [id ,name, age] => getId, getName, getAge
   class Test {
        // 声明属性
        // private String name = "zhangsan";
        // private final int age = 30;
        private var name : String = "zhangsan"
        val age : Int = 30
        @BeanProperty var email : String = _
    }
添加@BeanProperty之后,就符合Bean规范了,然后就可以使用set/get方法了 

1.3 访问权限

java :
          1. private    => 本类
          2. (default)  => 本类,本包
          3  protected  => 本类,本包,子类
          4. public     => 任意
 scala :
          1. private       => 同类
          2. private[包名]  => 同包,包私有  
          3. protected     => 受保护的, 同类,子类,没有同包
          4. (default) => 什么都不写就是公共的。没有public关键字

1.4 方法

动态绑定  只是针对成员方法来说,成员属性还有静态方法不满足动态绑定

2.高阶面向对象编程

posted @ 2021-05-21 21:28  triumph丶xs  阅读(67)  评论(0编辑  收藏  举报