1 如何定义类

[修饰符] class 类名 {
类体
}

定义类的注意事项

1)scala语法中,类并不声明为public,所有这些类都具有公有可见性(即默认就是public),

2)一个Scala源文件可以包含多个类.

 

2 属性

属性是类的一个组成部分,一般是值数据类型,也可是引用类型

属性/成员变量

1)属性的定义语法同变量,示例:[访问修饰符] var 属性名称 [:类型] = 属性值

2)属性的定义类型可以为任意类型,包含值类型或引用类型

3)Scala中声明一个属性,必须显示的初始化,然后根据初始化数据的类型自动推断,属性类型可以省略(这点和Java不同)。

4)如果赋值为null,则一定要加类型,因为不加类型, 那么该属性的类型就是Null类型

5)如果在定义属性时,暂时不赋值,也可以使用符号_(下划线),让系统分配默认值.

6)不同对象的属性是独立,互不影响,一个对象对属性的更改,不影响另外一个。案例演示+图(Monster) //这点和java完全一样

3  如何创建对象

基本语法

val | var 对象名 [:类型] = new 类型()

1)如果我们不希望改变对象的引用(即:内存地址), 应该声明为val 性质的,否则声明为var, scala设计者推荐使用val ,因为一般来说,在程序中,我们只是改变对象属性的值,而不是改变对象的引用。

2)scala在声明对象变量时,可以根据创建对象的类型自动推断,所以类型声明可以省略,但当类型和后面new 对象类型有继承关系即多态时,就必须写了

4 如何访问属性

基本语法

对象名.属性名;

5 类和对象的内存分配机制(重要)

6 方法

Scala中的方法其实就是函数,声明规则请参考函数式编程中的函数声明。

基本语法

def 方法名(参数列表) [:返回值类型] = {

方法体

}

给Cat类添加cal方法,可以计算两个数的和

class Dog {
private var sal: Double = _
var food : String = _ def cal(n1: Int, n2: Int): Int = {
return n1 + n2
}}

方法的调用机制原理

1) 当我们scala开始执行时,先在栈区开辟一个main栈。main栈是最后被销毁

2) 当scala程序在执行到一个方法时,总会开一个新的栈。

3) 每个栈是独立的空间,变量(基本数据类型)是独立的,相互不影响(引用类型除外)

4) 当方法执行完毕后,该方法开辟的栈就会被jvm机回收。

7 构造器

构造器(constructor)又叫构造方法,是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。

Scala构造器的介绍

和Java一样,Scala构造对象也需要调用构造方法,并且可以有任意多个构造方法(即scala中构造器也支持重载)。 Scala类的构造器包括: 主构造器辅助构造器 

Scala构造器的基本语法

class 类名(形参列表) { // 主构造器

// 类体

def this(形参列表) {// 辅助构造器

}

def this(形参列表) { //辅助构造器可以有多个...

}

}

//1. 辅助构造器 函数的名称this, 可以有多个,编译器通过不同参数来区分.

Scala构造器的快速入门

创建Person对象的同时初始化对象的age属性值和name属性值

Scala构造器注意事项和细节

1)Scala构造器作用是完成对新对象的初始化,构造器没有返回值。 

2) 主构造器的声明直接放置于类名之后 

3) 主构造器会执行类定义中的所有语句,这里可以体会到Scala的函数式编程和面向对象编程融合在一起,即:构造器也是方法(函数),传递参数和使用方法和前面的函数部分内容没有区别

4) 如果主构造器无参数,小括号可省略,构建对象时调用的构造方法的小括号也可以省略

5) 辅助构造器名称为this(这个和Java是不一样的),多个辅助构造器通过不同参数列表进行区分, 在底层就是f构造器重载。

6) 如果想让主构造器变成私有的,可以在()之前加上private,这样用户只能通过辅助构造器来构造对象了

7)辅助构造器的声明不能和主构造器的声明一致,会发生错误(即构造器名重复)

8  属性高级

构造器参数

1)Scala类的主构造器的形参未用任何修饰符修饰,那么这个参数是局部变量。

2)如果参数使用val关键字声明,那么Scala会将参数作为类的私有的只读属性使用

3)如果参数使用var关键字声明,那么那么Scala会将参数作为类的成员属性使用,并会提供属性对应的xxx()[类似getter]/xxx_$eq()[类似setter]方法,即这时的成员属性是私有的,但是可读写

Bean属性

avaBeans规范定义了Java的属性是像getXxx()和setXxx()的方法。许多Java工具(框架)都依赖这个命名习惯。为了Java的互操作性。

将Scala字段加@BeanProperty时,这样会自动生成规范的 setXxx/getXxx 方法。这时可以使用 对象.setXxx() 和 对象.getXxx() 来调用属性。

注意:给某个属性加入@BeanPropetry注解后,会生成getXXX和setXXX的方法 并且对原来底层自动生成类似xxx(),xxx_$eq()方法,没有冲突,二者可以共存。

Scala 面向对象(一):类与对象基础(一)的更多相关文章

  1. 077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象

    077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...

  2. MOOC C++笔记(二):类和对象基础

    第二周:类和对象基础 面向对象程序设计的四个基本特点 抽象.封装.继承.多态. 面向对象程序设计的过程 1.从客观事物抽象出类 抽象出的事物带有成员函数与成员变量(类似于带函数的结构体) 成员变量和成 ...

  3. oop面向对象【类与对象、封装、构造方法】

    今日内容 1.面向对象 2.类与对象 3.三大特征——封装 4.构造方法 教学目标 1.能够理解面向对象的思想 2.能够明确类与对象关系 3.能够掌握类的定义格式 4.能够掌握创建对象格式,并访问类中 ...

  4. C#基础篇--面向对象(类与对象)

    1.类是什么?  类就相当于模板,就是把同一类的事物的共同特征进行的抽象. 类的创建和说明: 类是先根据一些具体的对象(实体的东西)来抽象出来的共同的特性,然后用代码来表示. 在类中,用数据表示事物的 ...

  5. java语言基础(四)_面向对象_类_对象_封装_构造

    面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事物,每种事物都具备 ...

  6. Java核心基础第5篇-Java面向对象_类和对象

    Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...

  7. scala学习笔记——类和对象

    基础语法关于Scala程序,这是非常要注意以下几点. 区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义. 类名 - 对于所有的类名的第一个字 ...

  8. 面向对象、类与对象、成员与局部变量、封装、private、构造函数、this、static、extends、super、final、abstract、interface、多态、内部类、异常【5】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing ...

  9. JAVA 类和对象基础知识详解

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 和C++一样,JAVA也是一门面向对象的语言,其基础和核心是类和对象.而面向对象的思想是来源与显示生 ...

随机推荐

  1. 58同城Java面试

    总结这一次面试失败的不冤 很多知识,都是了解.知道,而没有做到明白与彻底的弄懂 差距还是比较大的 以后要多来写总结,提升自己,争取早日被认可 说说今天面试的主要内容和问题吧 希望大家集思广益 面试职位 ...

  2. 线程的状态及sleep、wait等方法的区别

    1.创建状态 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态.它保持这个状态直到程序 start() 这个线程. 2.就绪状态 当线程对象调用了start ...

  3. 微信小程序公司开发前必读

    事前准备: 微信小程序需要https请求,需要准备 1:备案的域名:由于备案需要一定的时间,所以请事先准备 2:受认可的证书 一个账号只能发布一个小程序,如需发布多个,请申请多个账号. 个人开发和学习 ...

  4. epic无法登陆怎么办【百分百解决】

    epic无法登陆怎么办(感谢吾爱破解吧www.52pjb.net)站长提供的文章教程以及解决思路,谢谢大佬,更详细的解决办法可以参考下他的网站解决的方法实例! epic登陆不上去怎么办?随着GTA5免 ...

  5. 解决GITLAB无法启动runsv no running

    可以先尝试用 systemctl start gitlab-runsvdir.service 如果冻结不动的话,就需要查看系统服务项了 systemctl -t target 如果系统正常的话,所有任 ...

  6. idea出现 淇℃伅 乱码

    问题:我是idea出现 淇℃伅 乱码, 解决:修改 tomcat 下的 logging.properties这个文件 为 GBK 就好了. 参考:https://blog.csdn.net/weixi ...

  7. Jupyter notebook中的Cell and Line Magics

    参考资料: https://www.jianshu.com/p/81ada9234788 https://my.oschina.net/u/2306127/blog/832510 首先,Cell an ...

  8. php配置文件

    mysql的配置文件是 my.iniphp配置文件是 php.iniThinKPHP配置文件 config.phpApche配置文件 httpd-confThinkPHP的运行,开启调试模式配置为 a ...

  9. cb50a_c++_STL_算法_局部排序partial_sort

    cb50a_c++_STL_算法_局部排序partial_sort partial_sort(b,se,e)排序一部分,begin,source end,endcout << " ...

  10. 团队进行Alpha冲刺--项目测试

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺--项目测试 作业正文 如下 其他参 ...