直接上代码说明:
object ClassScala { def main(args: Array[String]): Unit = { val obj = new University("a",1,1) println(obj) val stu = new Student("baby","女") /** * Array的apply方式创建对象 * def apply(x: Int, xs: Int*): Array[Int] = { val array = new Array[Int](xs.length + 1) array(0) = x var i = 1 for (x <- xs.iterator) { array(i) = x; i += 1 } array } */ val arr =Array(1,2,3,4,5) //使用apply来创建对象 val apply = ApplyScala("test") apply.info //内部类 val outer1 = new OuterClass("outer1") val outer2 = new OuterClass("outer2") val inner1 = new outer1.InnerClass("inner1")//必须使用外部类的实例对象创建内部类 val inner2 = new outer2.InnerClass("inner2") println(inner1) println(inner2) /** * 我inner2也是一个InnerClass对象 为什么编译出错? * 其实定义在内部类方法里面的InnerClass其实已经指定了只能传递当前outer1所创建的InnerClass * 所以传递outer2.InnerClass创建的对象是不行的 */ inner1.go(inner2)// Error:(46, 15) type mismatch;found : outer2.InnerClass required: outer1.InnerClass inner1.go(inner2) inner1.go(inner1)// right } } /** * 伴生类 * 默认构造函数 * @param name 姓名 * @param age 年龄 * @param sex 性别 */ class University (var name:String, var age:Int, var sex:Int){ //默认构造函数 private val no = University.studentNo private var like:String = _ def this(name:String, age:Int, sex:Int, like:String) {//重载构造函数 this(name, age, sex) this.like = like } def compareAge(other:University) = { this.age > other.age } override def toString: String = { //重写toString函数 "["+this.no +"[["+this.name +"]["+this.age+"]["+this.sex+"]["+this.like+"]" } } /** * 伴生对象 */ object University{ // private var no:Int = _ def studentNo = { no += 1 no } } /** * 在类名字后面加上private修饰表示不能用默认的构造函数去调用 * 也就是 new Student("baby") 这种方式编译会报错 * @param name */ class Student private(name:String){ private var sex:String = _ private[this] var age:Int = _ def this(name:String, sex:String){ this(name) this.sex = sex } def this(name:String, sex:String, age:Int){ this(name, sex) this.age = age } def age_ = age /** * 我们设置age是私有的 为什么这里可以直接调用 而在我们new 出来的对象 为什么不能直接这样操作? * age设置private范围其实是类的内部能见 * 如果要设置age只能在当前对象可见 我们只需要写成 private[this] var age * @param other * @return */ def compareAge(other:Student) = { //this.age > other.age this.age > other.age_ } } class ApplyScala(des: String) { def info = println("使用伴生对象的方法:"+ApplyScala.getNo +"---"+des) } object ApplyScala{ private var no:Int = 0 def getNo = { no += 1 no } /** * 定义apply方法,实例化伴生类 * @return */ def apply(des: String): ApplyScala = { println("使用apply来实例化伴生类") new ApplyScala(des) } } /** * 内部类 * @param name */ class OuterClass(val name:String){ outer => class InnerClass(val name:String){ /** * inner这个参数非常有特点 看调用 * @param inner */ def go(inner:InnerClass) = println(outer.name +"||" + inner.name) override def toString: String = { outer.name + " create " + this.name } } }
相关推荐
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
### Scala学习笔记(全) #### 一、Scala概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala...
在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...
Scala学习笔记,大全笔记
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
这与Java中的静态成员不同,Java的静态成员是在类加载时创建,而Scala的单例对象是在首次引用时初始化。这意味着单例对象可以包含状态(成员变量),并且可以拥有生命周期,尽管这个生命周期是从首次引用开始的。 ...
在Scala中,`object`是一种特殊的类,它只能有一个实例,因此它常被用来实现单例模式。当你首次调用`object`的方法或访问它的字段时,会执行`object`的初始化代码,即`object`中不在方法内的部分。这与Java中的静态...
Scala语言规范版本2.7为编程者提供了语言的语法、类型系统、声明与定义、类和对象、表达式、模式匹配、顶级定义等方面的详细说明。在标识符、命名和域方面,Scala具有自己的规则。比如标识符可以包含字母、数字、...
本书介绍Scala基本语法、构造。以及如何将您已经知道的复制java语法转换为Scala,了解Scala除了javabecome之外还提供了哪些功能编程概念和惯用技巧和建议,这些技巧和建议在将现有java项目转换为Scala时非常有用
### Scala学习笔记关键知识点 #### 1. “均码”哲学与并发编程 - **“均码”哲学**: 指的是Scala设计时遵循的一种设计理念,即尽量保持语言的统一性和简洁性,使得不同的功能和特性能够以一种相似的方式进行处理。...
在Scala中,可以定义在类内部的其他类,这些内部类可以访问外部类的所有成员,包括私有成员。这种设计允许更紧密的封装和组织代码。 课程还涉及了构造函数(constructor)的使用,包括默认构造函数和带参数的构造...