文章目录
1. 面向对象和面向过程
- 面向对象和面向过程的区别
- 面向对象:将现实的世界分割成不同的单元,每个单元都是个独立的对象 给个环境驱动一下 让各个对象协作起来 形成一个系统。 设计者思维,解决复杂需要协调的问题可以面向对象
- 面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 执行者思维 解决简单问题可以使用面向过程
- 关联: 面向对象和面向过程相辅相成 面向对象离不开面向过程
- 宏观上 通过面向对象进行整体设计
- 微观上 执行和处理数据 仍然是面向过程
- 例子:造车的过程
- 从设计者的角度出发 车可以分为 轮胎 发动机 座椅 玻璃 外壳。为了便于协作 我们找轮胎厂造轮胎 发动机厂造发动机 这样发现大家同时进行车的制造 最终进行组装 大大提高了效率。但是具体到轮胎的制造 仍然是有步骤的 离不开执行者 离不开面向过程的思维
- 面向对象的好处
- 程序之间低耦合 关联度低 易扩展。 比如 造车玻璃对象不满意 可以换成有机玻璃 轮胎可以换为有机轮胎
- 面向对象的三大特征
- 封装
- 广义上: 把抽象出的数据和对数据的操作 封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。
- 狭义上: 属性私有化 提供公共的get和set方法
- 好处:提高安全性
- 继承:子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法 提高代码复用
- 多态: 子类或者实现类的实例指向父类或者接口
- 好处:提高了代码的扩展性 减少很多冗余代码的书写
- 封装
public void doData(Connection conn){
// conn=new MySQLConnection() conn=new OracelConnection()
conn.method1()
conn.method2()
conn.method3()
}
- 三者之间的关系: 有了封装 才有继承 有了继承 才有多态
2. 类和对象
- 类:可以看成一个模板
- 对象: 表示具体的事物
2.1 定义类
[修饰符 ] 类名 class {
类 体
}
- Scala语法中 类并不声明为 public 所有类默认都是 public
- 一个scala源文件可以包含多个类
2.2 属性
- 定义格式: [修饰符 ] var |val 属性名称 [:类型 ] = 属性值
- 注:Bean 属性(@BeanPropetry) 可以自动生成 get set 方法
class Person{
@BeanProperty var name:String=_;
@BeanProperty var age:Int=_;
// val 修饰的属性不能赋默认值 必须显示指定
}
def main(args: Array[String]): Unit = {
val person = new Person()
println(person.getAge)
}
2.3 权限关键字
- 默认:公共访问权限 都可以访问
- protected :同类 子类访问
- private :同类可以访问
2.4 构造器
- 构造器分类:主构造器和辅助构造器
- 基本语法:
class 类名 形参列表 { // 主构造器
// 类体
def this 形参列表 ) { // 辅助构造器
def this 形参列表 ) { 辅助构造器可以有多个
}
- 辅助构造器不可以直接构造对象 必须直接或者间接调用主构造方法
- 主构造器无参数 小括号可省略 构建对象时调用的构造方法的小括号也可省略
object TestObject {
class Person() {
@BeanProperty var name: String = _;
@BeanProperty var age: Int = _;
println("主构造器被调用")
def this(age: Int) {
// 必须先调用主构造器
this
this.age = age;
println("辅助构造器1被调用")
}
def this(age: Int, name: String) {
this(age)
this.name = name
println("辅助构造器2被调用")
}
}
def main(args: Array[String]): Unit = {
val person = new Person(11)
println("********")
val person2 = new Person(11,"Tom")
}
}
主构造器被调用
辅助构造器1被调用
****