Scala--04 面向对象

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被调用
****
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值