六、Scala从入门到精通一一面对对象编程(初级)

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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机程序猿

觉得写的不错的给小编一点鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值