zoukankan      html  css  js  c++  java
  • Scala 面向对象(一):类与对象基础(一)

    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()方法,没有冲突,二者可以共存。

  • 相关阅读:
    [离散数学]集合3.1、3.2、3.3
    Hadoop YARN ResourceManager 未授权访问漏洞复现
    dns域传送漏洞
    文件包含漏洞详解
    XXE漏洞详解
    常见cms
    IP地址详解
    帧详解
    IP包头内容详解
    SSRF漏洞详解
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309046.html
Copyright © 2011-2022 走看看