04_Scala_OOP_类_属性_成员变量_创建对象
【摘要】 OOP_类
属性 显性赋值,自动类型推断, _ 默认值(指明类型)
创建对象 类型省略/类型必须写明(子类对象给予父类引用)
一 Scala语言是面向对象的
1) Java中还存在非面向对象内容:基本类型, null, 静态方法
2 )Scala语言来自Java, 天生面向对象,一切皆对象
二 类
【修饰符】 class 类名 { 类体}
1 )Scala语法中,类并不声明 public,所有类都具有共有可见性(默认public)
2 )一个scala 源文件可以包含多个类,默认都是public
三 属性/成员变量
1) 属性的定义同变量,例:[访问修饰符] var 属性名称 [:类型] = 属性值
2) 属性的定义类型可以为任意类型,包含值类型或引用类型
3) 声明一个属性,必须显示的初始化,然后根据初始化数据的类型自动推断,属性类型可以省略(这点和Java不同)
4)如果赋值为null,则一定要加类型,因为不加类型, 那么该属性的类型就是Null类型
5)如果在定义属性时,暂时不赋值,也可以使用符号_(下划线) 但必须指定类型,让系统分配默认值
类型 | _ 对应的值 |
Byte Short Int Long | 0 |
Float Double | 0.0 |
String 和 引用类型 | null |
Boolean | false |
object CatDemo {
def main(args: Array[String]): Unit = {
//创建一只猫
val cat = new Cat
//给猫的属性赋值
//说明
//1. cat.name = "sumi" 其实不是直接访问属性,而是 cat.name_$eq("sumi")
//2. cat.name 等价于 cat.name()
cat.name = "sumi" //等价
cat.age = 10
cat.color = "while"
cat.sex ="male" // 字符串
println("ok~")
printf("\n小猫的信息如下: %s %d %s", cat.name, cat.age, cat.color)
}
}
//定义一个类Cat
//一个class Cat 对应的字节码文件只有一个 Cat.class ,默认是public
class Cat {
//定义/声明三个属性
//说明
//1. 当我们声明了 var name :String时, 在底层对应 private name
//2. 同时会生成 两个public方法 name() <=类似=> getter public name_$eq() => setter
var name: String = "" //给初始值
var age: Int = _ // _ 表示给age 一个默认的值 ,如果Int 默认就是0 如果是用 _ 方式给默认值,则属性必须指定类型
var color: String = _ // _ 给 color 默认值,如果String ,默认是就是""
var sex = "" // 自动类型推断
}
/*
public class Cat
{
private String name = "";
private int age;
private String color;
public String name()
{
return this.name; }
public void name_$eq(String x$1) { this.name = x$1; }
public int age() { return this.age; }
public void age_$eq(int x$1) { this.age = x$1; }
public String color() { return this.color; }
public void color_$eq(String x$1) { this.color = x$1; }
}
*/
四 创建对象
val | var 对象名 [:类型] = new 类型()
1)如果不希望改变对象的引用(即:内存地址), 声明为val,否则为var, 推荐使用val ,在程序中,我们只是改变对象属性的值,而不是改变对象的引用。
2) 声明对象变量时,可以根据创建对象的类型自动推断,所以类型声明可以省略,但当类型和后面new 对象类型有继承关系即多态时,就必须写了
object CreateObj {
def main(args: Array[String]): Unit = {
val emp = new Emp // emp 类型就是Emp
//如果我们希望将子类对象,交给父类的引用,这时就需要写上类型
val emp2: Person = new Emp
}
}
class Person {
}
class Emp extends Person {
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)