scala中的类和对象

29 阅读3分钟

面向对象

它是一种编程思想,它是基于面向对象的,强调的是以对象为基础完成各种操作。

面向对象的三大思想特点

(1) 更符合人们的思考习惯

(2) 把复杂的事情简单化

(3) 把程序员从执行者变成指挥者

面向对象的三大特征

(1) 封装

(2) 继承

(3) 多态 封装,隐藏实现细节;继承,不劳而获的幸福;多态:丰富多彩的世界。

类class

(1) 属性也叫成员变量:名词,用来描述事物的外在特征

(2) 行为也叫成员方法:动词,表示事物能做什么

创建类和对象

在Scala中,用class来创建类,用new来创建对象。 创建一个Person类,并创建它的对象,然后将对象打印到控制台上。 1. 使用IDEA创建一个scala项目,并创建object类。

2. 设置项目名,包名,项目地址。注意不要使用中文,空格,特殊符号作为名字及路径名。

object Main {

// 定义类  
class Person{ }  


  def main(args: Array[String]): Unit = {

    println("Hello world!")

    // 创建对象

    val p = new Person()

    println(p)

  }

}

}

定义和访问成员变量

定义和访问成员变量。

1. var/val  来定义成员变量

2. 对象可以通过对象名.成员变量的方式来访问成员变量

3.  定义一个Person类,包含姓名和年龄字段

4.  创建一个名为张三,年龄为20的对象

5.  打印对象的名字和年龄 步骤

1. 创建一个Object类,添加main方法

2. 创建Person类,添加姓名字段和年龄字段,并对字段进行初始化,让scala自动推断

3. 在main方法中创建Person类对象,设置成员变量为张三,20

4. 打印对象的名字和年龄

object Main {

  // 定义类

  class Person{

    var age: Int = 20

    val name: String = "小明"

  }

  def main(args: Array[String]): Unit = {

    println("Hello world!")

    // 创建对象

    val p = new Person()

    println(p.name)

    p.age = 21

    println(p.age)

  }

}

理解构造器

构造器是一个函数,在new的时候,被自动调用,它的作用是实例化对象。

new Class() 就是在调用构造器,或者叫调用构造函数。

object Main {

    // 定义类

class Customer() {

    println("构造函数被调用")

  }

  def main(args: Array[String]): Unit = {

    val c = new Customer()

  }

}

构造函数的参数

object Main {

 // 定义类

class Customer(var name:String="小花", var:sex:String="男") {

    def sayHello(msg:String ) = {

      println("msg:", msg)

    }

  }

  def main(args: Array[String]): Unit = {

    val c = new Customer(“小花”,”女”)

    c.sayHello("你好 ")

  }  
}

案例三角形类

1. 求三角形的面积

2. 判断是否是一个三角形.

// 定义类

// 主构造函数  
object Base35 {  
  // 封装一个三角形类  
  // 给中学生使用,根据三条边。  
  // 1. 求三角形的面积  
  // 2. 判断是否是一个三角形.  
  class Triangle(var a:Double = 1.0,var b:Double = 1.0,var c:Double = 1.0) {  
    // println(s" ${a} ${c} ${c}")  
    // 检查是否构成三角形,结果是boolean  
    def check(): Boolean = {  
      // 构成三角形的条件是: 任意两边之和 > 第三边  
      return a+b > c && b+c>a && a+c >b  
    }  
    // 计算面积: 根据三角形的三边计算面积?  
    def getArea():Double = {  
      if(check()){  
        var s = (a+b+c)/2  
        s = Math.sqrt( s*(s-a)*(s-b)*(s-c) )  
        return s  
      } else {  
        println(s"${a} ${c} ${c} 不能构成一个三角形")  
        return -1  
      }  
    }  
  }  
  def main(args: Array[String]): Unit = {  
    val t1 = new Triangle(3,4,7) // 6  
    println( t1.getArea() )  
    val t2 = new Triangle(3,4,3) // 6  
    println( t2.getArea() )  
}