设为首页 加入收藏

TOP

6. Scala面向对象编程(基础部分)(一)
2019-08-15 00:11:00 】 浏览:121
Tags:Scala 面向 对象 编程 基础 部分

6.1 基本介绍 

  6.1.1 Scala语言是面向对象的

      1) Java时面向对象的编程语言,由于历史原因,Java中海存在着非面向对象的内容:基本类型,null,静态方法等

      2) Scala语言来自于Java,所以天生就是面向对象的语言,而且Scala时纯粹的面相对象的语言,即在Scala中,一切皆为对象

      3) 在面向对象的学习过程中可以对比着Java语言学习

  6.1.2 类和对象的区别和联系 

      1) 类是抽象的,概念的代表一类事物,比如人类,猫类...

      2) 对象是具体的,实际的,代表一个具体事物

      3) 类是对象的模版,对象是类的一个个体,对应一个实例

      4) Scala中类和对象的区别和联系和Java是一样的

  6.1.3 如何定义类 

      -基本语法

        [修饰符] class 类名 {

          类体

        }

      -定义类的注意事项

        1) Scala语法中,类并不声明为public,所有这些类都具有公有可见性(默认就是public)

        2) 一个Scala源文件可以包含多个类,而且默认都是public

  6.1.4 属性 

      -基本介绍

        属性是类的一个组成部分,一般是值数据类型,也可是引用类型

      -案例演示

class Dog {
  var name = "Tom"
  var lover = new Fish

}

class Fish {
  
}

  6.1.5 属性/成员变量 

      -注意事项和细节说明

       1) 属性的定义语法同变量,示例:[访问修饰符] var 属性名称 [: 类型] = 属性值

       2) 属性的定义类型可以为任意类型,包含值类型或引用类型

       3) Scala中声明一个属性,必须显示的初始化,然后根据初始化数据的类型自动推断,属性类型可以省略(这点和Java不同)

       4) 如果赋值为null,则一定要加类型,因为不加类型,那么该属性的类型就是Null类型

       5) 如果在定义属性时,暂时不赋值,也可以使用符号_(下划线),让系统分配默认值

       

class A {
  var a1: String = _ //null
  var a2: Byte = _ // 0
  var a3: Double = _ // 0.0
  var a4: Boolean = _ // false
}

  6.1.6 属性的高级部分 

      说明:属性的高级部分和构造器(构造方法/函数)相关,具体介绍将在构造器部分详解

  6.1.7 如何创建对象 

      -基本语法

      val | var 对象名 [: 类型] = new 类型()

      -说明

      1) 如果我们不希望改变对象的引用(即:内存地址),应该声明为val性质的,否则声明为var,Scala设计者推荐使用val,因为一般来说,在程序中,我们只是改变对象属性的值,而不是改变对象的引用

      2) Scala在声明对象变量时,可以根据创建对象的类型自动推断,所以类型声明可以省略,但当类型和后面new对象类型有继承关系时即多态,就必须写了

      3) 案例演示

object boke_demo01 {
  
  def main(args: Array[String]): Unit = {
    val emp = new Emp // emp 类型就是Emp
    //如果我们希望将子类对象,交给父类的引用,这时就需要写上类型
    val emp2: Person = new Emp

  }
}

class Person {

}

class Emp extends Person {
  
}

  6.1.8 类和对象的内存分配机制 

      -案例演示

object boke_demo01 {

  def main(args: Array[String]): Unit = {
    val p1 = new Person2
    p1.name = "jack"
    p1.age = 10

    val p2 = p1
    println(p1 == p2) // true
    p1.name = "tom"
    println("p2.name=" + p2.name) // p2.name=tom
  }

}

class Person2 {
  var name = ""
  var age: Int = _ //如果是用 _ 方式给默认值,则属性必须指定类型
}

      -案例演示对应的内存布局图

6.2 方法 

  6.2.1 基本说明 

      Scala中的方法其实就是函数,声明规则请参考函数式编程中的函数声明

  6.2.2 基本语法 

      def 方法名[: 返回值类型] = {

        方法体

      }

  6.2.3 方法案例演示 

      给Cat类添加cal方法,可以计算两个数的和

object MethodDemo01 {
  def main(args: Array[String]): Unit = {
    val cat = new Cat
    println(cat.cal(10, 20))
  }
}

class Cat {
  private var sal: Double = _
  var food: String = _

  //方法
  def cal(n1: Int, n2: Int): Int = {
    return n1 + n2
  }
}

6.3 构造器 

  6.3.1 看一个需求 

      我们来看一个需求:前面我们在创建Person的对象时,是先把一个对象创建好后,再给他的姓名和年龄属性赋值,如果现在要求,在创建Person类对象时,就直接制定这个对象的姓名和年龄,该怎么做?这时就可以使用构造方法/构造器

  6.3.2 回顾-Java构造器基本语法 

      [修饰符] 方法名 (参数列表) {

        构造方法体

      }

  6.3.3 回顾-Java构造器的特点 

      1) 在Java中一个类可以定义多个不同的构造方法,构造方法重载

      2) 如果程序员没有定义构造方法,系统会自动给类生成一个无参构造方法(也叫默认构造器),比如:Person(){}

      3) 一旦定义了自己的构造方法(构造器),默认的构造方法就覆盖了,就不能使用默认的无参构造方法,除非显示的定义一下,即:Person(){}

  6.3.4 Java构造器案例 

      在前面定义的Person类中添加两个构造器

      第一个无参构造器:利用构造器设置所有人的age属性初始值都为18

      第二个带name和age两个参数的构造器:使得每次创建Person对象的同时初始化对象的name属性值和age属性值

public class Person {

    public String name;
    public int age;

    public String getInfo() {
        return name + "\t" + age;
    }

    public Person() {
        age = 18;
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

}

  6.3.5 Scala构造器的介绍

      和Java一样,Scala构造对象也需要调用构造方法,并且可以有任意多个构造方法(即Scala中构造器也支持重载),Scala类的构造器包括:主构造器和辅助构造器

  6.3.6 Scala构造器的基本语法&

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇2. Scala变量 下一篇7. Scala面向对象编程(中级部分)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目