6、面向对象编程
6.1、类与对象
->
张老太养了只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年10岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示 张老太没有这只猫猫。
//问题
猫有三个属性,类型不一样.
如果使用普通的变量就不好管理
使用一种新的数据类型((1) 可以管理多个不同类型的数据 [属性]) (2) 可以对属性进行操作-方法
因此类与对象
6.1.1、Scala语言是面向对象的
1、Java是面向对象的编程语言,由于历史原因,Java中还存在着非面向对象的内容:基本类型 ,null,静态方法等。
2、Scala语言来自于Java,所以天生就是面向对象的语言,而且Scala是纯粹的面向对象的语言,即在Scala中,一切皆为对象。
3、在面向对象的学习过程中可以对比着Java语言学习
6.1.2、快速入门-面向对象的方式解决养猫问题
object CatDemo {
def main(args: Array[String]): Unit = {
// 创建一个猫
val cat = new Cat
// 给猫的属性赋值
// 说明
// 1. cat.name=“小白” 其实不是直接访问属性,而是 cat.name_$eq("小白")
// 2. cat.name 等价于 cat.name()
cat.name = "小白" // 等价
cat.age = 10
cat.color = "白色"
println("ok···")
printf("\n小猫的信息如下:%s,%d,%s",cat.name,cat.age,cat.color)
}
}
// 定义一个类
// 一个class Cat 对应的字节码文件只有一个Cat.class,默认是public
class Cat {
// 声明3个属性
// 说明
// 1.当我们声明了 var name :String 时,在底层对应private name
// 2.同时会生成 两个public方法 name() <=类似=> getter name_$et() => setter
var name:String = "" // 给初始值
var age:Int = _ // _ 表示给age 一个默认的值,如果是Int,默认就是0
var color:String = _ // _给 color 默认值,如果时String,默认就是""
}
6.1.3、类与对象的区别和联系
通过上面的案例和讲解我们可以看出:
1、类是抽象的,概念的,代表一类事物,比如人类,猫类…
2、对象是具体的,实际的,代表一个具体事物
3、类是对象的模板,对象是类的一个个体,对应一个实例
4、Scala中类和对象的区别和联系 和 Java是一样的。
6.1.4、如何定义类
->基本语法
[修饰符] class 类名 {
类体
}
定义类的注意事项
scala语法中,类并不声明为public,所有这些类都具有公有可见性(即默认就是public),[修饰符在后面再详解].
一个Scala源文件可以包含多个类.
6.1.5、属性
基本介绍
案例演示:
class Dog{
var name = "jack"
var lover = new Fish
}
属性是类的一个组成部分,一般是值数据类型,也可是引用类型。比如我们前面定义猫类 的 age 就是属性
6.1.6、属性/成员变量
注意事项和细节说明
1)属性的定义语法同变量,示例:[访问修饰符]var 属性名称[:类型] = 属性值
2)属性的定义类型可以为任意类型,包括值类型或引用类型[案例演示]
3)Scala中声明一个属性,必须显示的初始化,然后根据初始化数据的类型自动推断,属性类型可以省略(这点和Java不同)。
4)如果赋值为null则一定要加类型,因为不加类型,那么该属性的类型就是Null类型.
object PropertyDemo {
def main(args: Array[String]): Unit = {
val p1 = new Person
println(p1.Name) // Null
println(p1.address) // String
}
}
class Person {
var age: Int = 10 // 给属性赋初始值,省略类型,会自动推导
var sal = 8090.9
var Name = null // Name 是什么类型
var address: String = null // ok
}
5)如果在定义属性时,暂时不赋值,也可以使用符号**_(下划线),**让下同分配默认值
6)不同对象的属性是独立,互不影响,一个对象对属性的更改,不影响另外一个。
案列演示+图(Monster)//这点和Java完全一样
def main(args: Array[String]): Unit = {
var worker1 = new Worker
worker1.name = "jack"
var worker2 = new Worker
worker2.name = "tom"
}
class Worker {
var name = ""
}
6.1.7、属性的高级部分
说明:属性的高级部分和构造器(构造方法/函数) 相关,我们把属性高级部分放到构造器那里讲解
6.1.8、如何创建对象
基本语法
val | var 对象名[:类型] = new 类型 ()
说明:
1) 如果我们不希望改变对象的引用(即:内存地址),应该声明为va