面向对象的相关概念
1. 什么是面向对象?
它是一种编程思想,它是基于面向对象的,强调的是以对象为基础完成各种操作。
2. 面向对象的三大思想特点是什么?
(1) 更符合人们的思考习惯
(2) 把复杂的事情简单化
(3) 把程序员从执行者变成指挥者
3. 什么是类class? 类是属性和行为的集合。
(1) 属性也叫成员变量:名词,用来描述事物的外在特征
(2) 行为也叫成员方法:动词,表示事物能做什么
例:学生有姓名和年龄这些是属性,学生要学习,要吃饭这些是行为。
4. 面向对象的三大特征是
(1) 封装
(2) 继承
(3) 多态
例: 封装,隐藏实现细节;继承,不劳而获的幸福;多态:丰富多彩的世界。
创建类和对象
在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. 定义一个Person类,包含姓名和年龄字段
2. 创建一个名为张三,年龄为20的对象
3. 打印对象的名字和年龄
步骤
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)
}
定义和访问成员方法
类可以有自己的行为,scala中也可以通过定义成员方法来定义类的行为。 在scala的类中,使用def定义成员方法。
def 方法名(参数1:数据类型 , 参数2:数据类型): [return type] = {
// 方法体
}
注意:返回值的类型可以不写,由Scala自动进行类型推断
教师编码现场演示
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("你好 ")
}
}
成员访问的本质
在本质上和java的set,get类似。 要注意:
1.val定义的变量可以生成 get。可以访问。
2.var定义的变量可以生成 get + set。可以访问 + 修改。
3.使用private修饰的变量,既不可以访问,也不可以修改。
编码演示
object Main {
// 定义类
class Customer() {
private var age = 10
}
def main(args: Array[String]): Unit = {
val c = new Customer()
println(c.age) // 报错
}
}
主构造函数
提问:有没有方法可以直接在定义对象的时候就去给成员赋值?在java中,使用public定义与类同名的方法。
在scala中,直接在定义类时,补充参数即可。
【讲解】格式: class 类名([参数列表])
【编写示例代码】
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("你好 ")
}
}
Class 类名(参数列表),参数列表中的变量可以用var|val,也可以不用。
用val或var定义,在类外可以访问
不用val|var定义,在类外不可以访问 内部只读,不可改
辅助构造函数
构造函数只能有一个吗?
可以有很多个。
格式
// 定义类
// 主构造函数
class Customer(var name:String, var:sex:String) {
var age:Int = 0
// 辅助构造器
def this(name: String, sex: String, age: Int){
this(name, sex)
this.age = age
}
}