构造函数可见性 一个字段被声明为var,Scala会为该字段生成getter和setter方法 一个字段是val,只会生成getter方法。...如果一个字段没有val或者var,Scala不会生成getter和setter方法 var和val字段可以被private关键字修饰,防止生成getter和setter方法 定义辅助构造函数:在类内部以...辅助构造函数必须用this为名创建 每个辅助构造函数必须从调用之前定义的构造函数开始 一个构造函数通过this调用另一个不同的构造函数 case class里添加的辅助构造函数不是构造函数,是类的伴生对象中的...private[this]修饰意味着只有包含改字段的对象可以访问,字段甚至无法被相同类型的其他实例访问。...* 辅助构造函数的第一行必须调用当前类的另一个构造函数,好久无法调用超类的构造函数
Scala 是一个函数式编程语言,也是一个面向对象的编程语言,与 Java、 Python、 Ruby、Smalltalk 等其他语言一样,Scala 在架构层面上提倡的方法是:小处用函数式编程,大处用面向对象编程...也可以用定制的getter/setter方法替换掉原来的字段的定义,而不必修改使用的客户端——这就是所谓的“统一访问原则”。...,如上面的例子中,name和age成为person类的字段 2:主构造器会执行类定义中的所有语句 构造参数也可以是普通的方法参数,不带val或var,这样的参数如何处理取决于它们在类中如何被定义。...如果不带val或var的桉树至少被一个方法所使用,那么它将是字段 辅助构造器 和java一样,Scala也可以有任意多的构造器 1:辅助构造器的名称为this,在java中辅助构造器的名称与类名相同 2...:每一个辅助构造器都必须以一个对先前已定义的其它辅助构造器或主构造器的调用开始 class person{ private var name=“” private var age = 0
//下面这个函数的作用:有两点 //1、后面的是前面的注释,在rules验证的时候,如果报错,会把此处的后面的内容显示出来 //2、hint作用,即表单中用户插入数据时,提示用户该字段该填什么内容...public function attributeLabels() { return [ 'id' => 'ID',//id为数据表中的字段名,ID 为表单显示的描述...'name' => '这是用户名', 'password' => 'Password', ]; } 可以新增加个属性,设置set和get 代码如下,添加到模型中即可...,name1是修改后的值 private $name; public function getName(){ return $this->name1; } public
对象私有字段 在Scala中,方法可以访问该类的所有对象的私有字段: class Counter { private var value = 0 def increment(): Unit =...Scala允许你将访问权限赋予指定得类,private[类名]可以定义仅有指定类的方法可以访问给定的字段.这里的类名必须是当前定义的类,或者是包含该类的外部类....辅助构造器 Scala可以有任意多的构造器,不过,Scala有一个构造器比其他所有构造器都重要,就是主构造器,除了主构造器之外,类还有任意多的辅助构造器.其同Java中的构造器十分相似,只有两处不同:...辅助构造器的名称为this 每一个辅助构造器都必须以一个先前已定义的其他辅助构造器或主构造器的调用开始 class Person { private var name = "" private...= age } } 主构造器的参数被编译成字段,其值被初始化成构造时传入的参数.上述示例中name和age为Person类的字段. (2) 主构造器会执行类定义中的所有语句 class Person
在scala中,除了定义主构造器外,还可以根据需要来定义辅助构造器。...DANGER] 辅助构造器的第一行代码,必须要调用主构造器或者其他辅助构造器 示例 示例说明 定义一个Customer类,包含一个姓名和地址字段 定义Customer类的主构造器(初始化姓名和地址...10.1 定义语法 scala和Java一样,使用extends关键字来实现继承 可以在子类中定义父类中没有的字段和方法,或者重写父类的方法 类和单例对象都可以从某个父类继承 语法 class/object...类型判断 有时候,我们设计的程序,要根据变量的类型来执行对应的逻辑。 在scala中,如何来进行类型判断呢?...(类型)object来进行类型转换,在scala中如何实现呢?
在scala中,除了定义主构造器外,还可以根据需要来定义辅助构造器。...DANGER] 辅助构造器的第一行代码,必须要调用主构造器或者其他辅助构造器 示例 示例说明 定义一个Customer类,包含一个姓名和地址字段 定义Customer类的主构造器(初始化姓名和地址...10.1 定义语法 scala和Java一样,使用extends关键字来实现继承 可以在子类中定义父类中没有的字段和方法,或者重写父类的方法 类和单例对象都可以从某个父类继承 语法 class/object...(类型)object来进行类型转换,在scala中如何实现呢?...在scala中,也可以定义抽象的字段。
表示直接通过主构造器定义成员变量 构造器参数列表可以指定默认值 创建实例,调用构造器可以指定字段进行初始化 整个class中除了字段定义和方法定义的代码都是构造代码 示例 1....定义一个Person类,通过主构造器参数列表定义姓名和年龄字段,并且设置它们的默认值 2. 在主构造器中输出"调用主构造器" 3....// 构造器代码 } 辅助构造器的第一行代码,必须要调用主构造器或者其他辅助构造器 示例 示例说明 定义一个Customer类,包含一个姓名和地址字段 定义Customer类的主构造器(...定义语法 使用extends关键字来实现继承 可以在子类中定义父类中没有的字段和方法,或者重写父类的方法 类和单例对象都可以从某个父类继承 语法 class/object 子类 extends...,可以使用super来引用父类 用法 子类要覆盖父类中的一个方法,必须要使用override关键字 使用override来重写一个val字段 使用super关键字来访问父类的成员方法 示例
终于,为了大数据分析我还是开启了Scala学习之路 Scala从零起步:变量和标识符 Scala从零起步:运算符 就是个控制结构,Scala能有什么新花样呢?...这个类的定义与前述定义中的主要区别仅在于将两个属性字段的声明从{}中转移到了()中,但同时还有本质上的区别:在()中声明的属性实际上称之为主构造器,或者理解为初始化的过程(类似于Python中定义类都要定义的那个...除了在类名后增加小括号用于实现主构造器,Scala中的类定义还支持辅助构造器。...这里,重新def的两个this方法其实就称作辅助构造器,而各自内部调用的this方法则实际上就是主构造器,通过重载this方法实现了不同的构造形式。...当然,定义辅助构造器的要求是:必须都以this命名方法,且在方法体内部也都必须首先调用名为this的主构造器。
()函数 就是【包对象】 scala 中声明的函数 sayOk } } object TestObj { def main(args: Array[String...7.6.7 Scala 中超类的构造 Scala 超类的构造说明 1、类有一个主构器和任意数量的辅助构造器,而每个辅助构造器都必须先调用主构造器(也可以是间接调用),这点在前面我们说过了。 ...2、只有子类的主构造器可以调用父类的构造器(主和辅均可)。子类的辅助构造器不能直接调用父类的构造器。在 Scala 的子类的构造器中,你不能调用 super(params)。...Emp辅助构造器 ---------- Person... 默认的名字 Emp... Emp辅助构造器 ---------- Person... Emp... 7.6.8 覆写字段 ?...(字段/属性)就是抽象的属性,抽象属性在抽象类中。
5、辅助构造器:类似于Java/C++中的构造器,但是有两点不同:1)所有辅助构造器的名字都为this,2)每一个辅助构造器都必须以一个先前定义的其他辅助或主构造器的调用开始。...如果带参数则在类名后的()中定义,如果使用表5.1中定义的参数,将在类中为字段,如果不包含val和var,没有方法使用的情况下改参数只用于语句访问,如果方法使用了就是对象私有字段。...5、在Scala中程序必须从object对象的main方法开始。 第七章:包和引入 1、包和Java中的包类似,只是Scala中定义包的方式更多,可以使用{},可以文件顶部标记。...3、测试某个对象属于哪个类使用isInstanceOf方法,当对象是该类或者子类的对象时返回True. 4、Scala中也有protected修饰符,与java中的一样 5、子类的辅助构造器不能调用父类的构造器只能通过子类的主构造器进行调用形式如下...等 7、闭包:闭包确保Scala中可以访问非局部变量,比如上面的mulBy中的factor即是这样一个变量,通过赋值不同的值不同的调用会不一样。
var n = 10/0 } 4、Scala 构造器的基本语法 scala class 类名( 形参列表) { // 主构造器 // 类体 def this( 形参列表) { // 辅助构造器...中包的可见性和访问修饰符的使用 1) 当属性访问权限为默认时,从底层看属性是 private 的,但是因为提供了 xxx_$eq()[类似 setter]/xxx()[类似getter] 方法,因此从使用效果看是任何地方都可以访问...4) protected 为受保护权限,scala 中受保护权限比 Java 中更严格 , 只能子类访问,问同包无法访问 (编译器从语法层面控制)。...3) 伴生对象中的属性和方法都可以通过伴生对象名直接调用访问 4) 从语法角度来讲,所谓的伴生对象其实就是类的静态方法和静态变量的集合 5) 从技术角度来讲,scala 还是没有生成静态的内容,只不过是将伴生对象生成了一个新的类...特质也是有构造器的,构造器中的内容由“字段的初始化”和一些其他语句构成。
类、对象、继承和trait 3.1 类 3.1.1 类的定义 Scala中,可以在类中定义类、以在函数中定义函数、可以在类中定义object;可以在函数中定义类,类成员的缺省访问级别是:public...Scala主要分主构造器和辅助构造器两种: 主构造器里面的变量会被执行,方法会被加载,调用的方法会被执行 辅助构造器(相当于重载的构造函数)不可以直接调用超类的主构造器 /**每个类都有主构造器,...主构造器的参数直接放置类名后面,可以在主构造器中对字段赋值,对于主构造器中参数已赋值的在new的时候可以不再赋值 private[com.bigdata] class Study{}:只有com.bigdata...类和伴生对象之间可以相互访问私有的方法和属性,但类的字段被private[this]修饰的只有本类能访问 3.2.2 应用程序对象 Scala程序都必须从一个对象的main方法开始,可以通过扩展App...apply方法有点类似于java中的构造函数,接受构造参数变成一个对象。 unapply方法就刚好相反,它是接收一个对象,从对象中提取出相应的值,主要用于模式匹配(后文阐述)中。
${m2.age}") } } 辅助构造器 辅助构造器的默认名字都是this,且不能修改,辅助构造器的第一行代码,必须要调用主构造器或者其他辅助构造器 def this(参数名: 类型,参数名...在java中main方法是静态的,而在scala中没有静态方法,所以在scala中,main方法必须放在一个单例对象中。...,这个object称为伴生对象,这个class称为伴生类 注意: 伴生对象必须要和伴生类一样的名字 伴生对象和伴生类在同一个scala源文件中 伴生对象和伴生类可以相互访问private属性 object...Scala代码中可以在子类中使用override来重写父类的成员,也可以使用super来引用父类的成员.可以使用override来重新一个val字段。...3.类与特质之间是继承关系,只不过类与类之间只支持单继承,但是类与特质之间,既可以单继承,也可以多继承 4.Scala的特质中可以有普通字段, 抽象字段, 普通方法, 抽象方法. trait 特质名称
前言 在《大数据之脚踏实地学19--Scala中类的使用》中我们详细介绍了Scala中类的使用,通过类的构造,借助于new关键词创建不同的实例化对象,进而实现代码的可复用性。...} } 针对如上的构造器语法,有几点内容需要说明: 构造器可分为主构造器和辅助构造器; 主构造器中除了方法之外的所有代码都会被执行; 辅助构造器的创建一定是以this关键词开头; 辅助构造器是没有返回值的...; 接下来通过两个具体的例子,解释Scala中构造器的使用。...在下面例子中,我们给类创建了主构造器和辅助构造器,其中辅助构造器的功能是计算税后收入。从代码的最后一部分可以看出,我们创建的两个实例化对象p2和p3时,给类Friend2传递了不同个数的参数。...单例对象可以分为孤立对象和伴生对象两种,孤立对象是指在一个Scala脚本文件中,对象的名称与类的名称不一致,这样的对象是不能访问类中的私有属性或方法的;伴生对象则是指脚本文件中,对象的名称与类的名称完全一致
中constructor详解: 3.1:Scala中,可以给类定义多个辅助constructor,类似于java中的构造函数重载;辅助constructor之间可以互相调用,而且必须第一行调用主...;因此子类的辅助constructor是一定不可能直接调用父类的constructor的; 注意:只能在子类的主constructor中调用父类的constructor,以下这种语法,就是通过子类的主构造函数来调用父类的构造函数...而继承了trait的类的构造机制如下所示: a、父类的构造函数执行。 b、trait的构造代码执行,多个trait从坐到右依次执行。 ...而继承了trait的类的构造机制如下所示: a、父类的构造函数执行。 b、trait的构造代码执行,多个trait从坐到右依次执行。 ...中,trait是没有接受参数的构造函数的,这是trait与class的唯一区别,但是如果需求就是要trait能够对field进行初始化,那么只能使用Scala中非常特殊的一种高级特性--提前定义:
之前学的都是默认构造器,我们接下来要学习如何自定义构造器。 主构造器 我们学习过,Java的构造器,有构造列表和构造代码块。 ?...在scala中,我们可以使用更简洁的语法来实现。 语法 ? [!...NOTE] 主构造器的参数列表是直接定义在类名后面,添加了val/var表示直接通过主构造器定义成员变量 构造器参数列表可以指定默认值 创建实例,调用构造器可以指定字段进行初始化 整个class中除了字段定义和方法定义的代码都是构造代码...示例 定义一个Person类,通过主构造器参数列表定义姓名和年龄字段,并且设置它们的默认值 在主构造器中输出"调用主构造器" 创建"张三"对象(姓名为张三,年龄为20),打印对象的姓名和年龄 创建"空...---- 辅助构造器 在scala中,除了定义主构造器外,还可以根据需要来定义辅助构造器。例如:允许通过多种方式,来创建对象,这时候就可以定义其他更多的构造器。
一、Scala中的包管理 基本语法 package + 包名 包管理的作用 区分相同名字的类 当类很多时,可以很好的管理类 控制访问范围 ---- 包的命名 命名规则:只能包含数字、字母、下划线、小圆点...: 一个源文件中可以声明多个 package 子包中的类可以直接访问父包中的内容,而无需导包 包对象 定义包对象: package object 包名{ // 代码块 } Scala 中可以为每个包定义一个同名的包对象...访问权限 Java 中,访问权限分为:public,private,protected 和默认 Scala 中属性和方法的默认访问权限为 public,但 Scala 中无 public 关键字,不用显式声明...var 修饰对象,可以修改对象的引用和修改对象的属性值 构造器 Scala 构造对象也需要调用构造方法,构造器包括主构造器和辅助构造器。...主构造器参数说明 主构造器函数的形参包括三种类型:未用任何修饰、var 修饰、val 修饰 不加参数列表相当于为空,()可以省略。
)闭包 闭包可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。...scala> var p3=new Point(1,2) p3: Point = Point@630643f6 scala> 程序说明: 一个类没有显示定义构造器,则自动拥有一个无参构造器 辅助构造器的名称是...,所以不能直接通过构造器来定义Account类的对象 Account类的伴生对象可以访问Account类的私有构造器, 通过apply方法定义了一个Account类的对象 注意:Array(100)和new...Array(100)是调用了伴生对象的apply方法,100是一个元素的值;而new Array(1000)是调用了Array类的辅助构造器this(100),创建了100个null元素。...2、只有主构造函数才可以往基类的构造函数里写参数。 3、在子类中重写超类的抽象方法时,你不需要使用override关键字。
二十一,getter和setter 私有属性可以通过getter和setter方法比较安全地访问和修改。 ? 二十二,构造器 Scala的类包括一个主构造器和若干个(0个或多个)辅助构造器。...主构造器即定义类时传参并用来初始化对象属性的构造器,它是隐含的。 辅助构造器的名称为this,每个辅助构造器都必须调用一个此前已经定义好的主构造器或辅助构造器。 ?...二十四,继承和特征 Scala可以通过extends关键字指定从某个超类(父类)进行继承。 只有子类的主构造器可以调用超类的主构造器。 子类可以使用super引用超类的某个属性和方法。...实践中我们一般用apply方法来构造对象,而无需用new声明一个对象,从而相当于一个语法糖。 unapply方法是apply方法的逆方法,我们一般用它来从对象中反推得到其构造参数。...二十六,Scala语言的设计哲学 1,一切皆对象 从整数,字符串,函数,类到各种数据结构,Scala中一切皆为对象,Any是它们的超类。
领取专属 10元无门槛券
手把手带您无忧上云