`

scala学习笔记(七):单例对象、伴生对象、内部类

 
阅读更多

直接上代码说明:

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编程详解 第15讲-Scala编程详解:面向对象编程之Trait 共14页.pptx

    Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...

    Scala学习笔记(全)

    ### Scala学习笔记(全) #### 一、Scala概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala...

    scala学习笔记整理

    在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...

    Scala学习笔记,大全笔记

    Scala学习笔记,大全笔记

    Scala编程详解 第3讲-Scala编程详解:基础语法 共8页.pptx

    Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...

    Scala编程详解 第18讲-Scala编程详解:模式匹配 共11页.pptx

    Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...

    Scala编程详解 第5讲-Scala编程详解:函数入门 共5页.pptx

    Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...

    Scala编程详解 第16讲-Scala编程详解:函数式编程 共14页.pptx

    Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...

    Scala编程详解 第11讲-Scala编程详解:Map与Tuple 共8页.pptx

    Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...

    Scala编程详解 第10讲-Scala编程详解:数组操作之数组转换 共5页.pptx

    Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...

    Scala编程详解 第20讲-Scala编程详解:隐式转换与隐式参数 共9页.pptx

    Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...

    Scala编程详解 第17讲-Scala编程详解:函数式编程之集合操作 共9页.pptx

    Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...

    Scala编程详解 第7讲-Scala编程详解:函数入门之变长参数 共4页.pptx

    Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...

    Scala编程详解 第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页.pptx

    Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...

    Scala进阶_单例对象

    这与Java中的静态成员不同,Java的静态成员是在类加载时创建,而Scala的单例对象是在首次引用时初始化。这意味着单例对象可以包含状态(成员变量),并且可以拥有生命周期,尽管这个生命周期是从首次引用开始的。 ...

    Scala编程详解 第13讲-Scala编程详解:面向对象编程之对象 共9页.pptx

    在Scala中,`object`是一种特殊的类,它只能有一个实例,因此它常被用来实现单例模式。当你首次调用`object`的方法或访问它的字段时,会执行`object`的初始化代码,即`object`中不在方法内的部分。这与Java中的静态...

    Scala语言规范版本:2.7

    Scala语言规范版本2.7为编程者提供了语言的语法、类型系统、声明与定义、类和对象、表达式、模式匹配、顶级定义等方面的详细说明。在标识符、命名和域方面,Scala具有自己的规则。比如标识符可以包含字母、数字、...

    Scala for Java Developers: A Practical Primer(by Toby Weston)

    本书介绍Scala基本语法、构造。以及如何将您已经知道的复制java语法转换为Scala,了解Scala除了javabecome之外还提供了哪些功能编程概念和惯用技巧和建议,这些技巧和建议在将现有java项目转换为Scala时非常有用

    Scala学习笔记

    ### Scala学习笔记关键知识点 #### 1. “均码”哲学与并发编程 - **“均码”哲学**: 指的是Scala设计时遵循的一种设计理念,即尽量保持语言的统一性和简洁性,使得不同的功能和特性能够以一种相似的方式进行处理。...

    Scala编程详解 第12讲-Scala编程详解:面向对象编程之类 共12页.pptx

    在Scala中,可以定义在类内部的其他类,这些内部类可以访问外部类的所有成员,包括私有成员。这种设计允许更紧密的封装和组织代码。 课程还涉及了构造函数(constructor)的使用,包括默认构造函数和带参数的构造...

Global site tag (gtag.js) - Google Analytics