一、面向对象的相关概念
1. 什么是面向对象?
它是一种编程思想,它是基于面向对象的,强调的是以对象为基础完成各种操作。
2. 面向对象的三大思想特点是什么?
(1) 更符合人们的思考习惯
(2) 把复杂的事情简单化
(3) 把程序员从执行者变成指挥者
3. 面向对象的三大特征是
(1) 封装
(2) 继承
(3) 多态
举例: 封装,隐藏实现细节;继承,不劳而获的幸福;多态:丰富多彩的世界。
4. 什么是类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)
}
}
}
// 类是属性的集合
// 实质的,构造函数用来创建对象的
// 辅助构造函数,提供多种创建对象的方式
class Student(var name: String, var age: Int) {
println("构造函数被调用...")
def sayHi(): Unit = {
println(s"我是${name}, 我今年${age}")
}
// 辅助构造函数
// (1)它的名字就是this
// (2)它的体的第一句代码就必须调用 主构造函数 this("无名氏", 0)
def this() {
this("无名氏", 0)
println("辅助构造函数1被调用...")
}
def this(name: String) {
this(name, 0)
println("辅助构造函数2被调用...")
}
}
object base56 {
def main(args: Array[String]): Unit = {
// 创建一个学生对象
// val stu1 = new Student("小范", 18)
// 调用对象的方法
// stu1.sayHi()
// stu1.age = 19
// 调用对象的方法
// stu1.sayHi()
// 这里没有设置参数,它会调用辅助构造函数
val stu2 = new Student()
stu2.sayHi()
// 这里没有设置参数,它会调用辅助构造函数
val stu3 = new Student("小昕")
stu3.sayHi()
}
}
运行结果
私有 private
object base57 {
// 私有 private
class Student(var name: String, var age: Int) {
// 在方法前面添加 private,那这个方法是私有的,它不能在 class的 外部被访问
private def song(): Unit = {
println("我在唱歌.....")
}
def sayHi(): Unit = {
println(s"我是${name},我今年${age}")
// 私有方法,在类的内部是可以正常调用的
song()
}
}
def main(args: Array[String]): Unit = {
val stu3 = new Student("小明", 18)
stu3.sayHi()
// stu3.song() // 会报错
}
}
注意
1.在方法前面添加 private,那这个方法是私有的,它不能在 class的 外部被访问
2.私有方法,在类的内部是可以正常调用的
object 对象
单例对象,可直接用object来定义。不能用new! 单例对象,只有一个,不能通过new生成多个!一般用来存放工具,常量
//object 对象
// 单例对象,直接使用object来定义。不能用new!
// 单例对象,只有一个,不能通过new来生成多个。它一般用来存放工具方法,常量...。
object Tools {
val PI = 3.14
def doubleN(n: Int): Int = {
n * 2
}
}
object base58 {
def main(args: Array[String]): Unit = {
val rst = Tools.PI * Tools.doubleN(2) // 12.56
println(s"rst = ${rst}")
}
}