scala 类和对象 样例类 类的继承

类和对象

复制代码
package scala

object Demo9Class {
  def main(args: Array[String]): Unit = {

    /**
      * 类和对象
      *
      */

    val student = new Student(1, "张三")

    println(student._name)
    println(student.getId())

    println(student)

    System.out.println(student)

    val lisi = new Student(2, "李四", 24)

    println(lisi)

  }
}

/**
  * 类中可以定义属性,方法,构造函数
  *
  *
  * scala 的类有一个默认构造函数,默认构造函数可以有参数
  *
  */

class Student(id: Int, name: String) {
  println("默认构造函数")

  //定义属性并赋值
  //private 属性私有化
  private val _id: Int = id
  val _name: String = name


  // 下划线  占位符,没有实际意义,只是起到占位置的功能
  var _age: Int = _

  //定义方法
  def getId(): Int = {
    return _id
  }

  //省略
  //def getId: Int = _id


  //override 方法重写
  override def toString: String = {
    "Student(" + _id + "," + _name + "," + _age + ")"
  }
  
  /**
    * 重载构造函数
    *
    * 再重载构造函数的第一行需要显示调用默认构造函数
    *
    */

  def this(id: Int, name: String, age: Int) {
    //调用默认构造函数
    this(id, name)

    //给属性赋值
    this._age = age

  }

}
复制代码

样例类

复制代码
package scala

object Demo10CaseClass {
  def main(args: Array[String]): Unit = {
    val user = new User("001","张三")

    println(user)
    println(user.id)
    println(user.name)

    //修改属性
    user.name="李四"

    //样例类创建对象可以不用new
    val user1 = User("002","李四")
    println(user1)
  }
  /**
    * 样例类
    * scala编译器在编译的时候会动态给样例类增加很多方法(toString,hashCode,序列化,属性)
    *
    * 属性和参数是一样的
    *属性默认是val,是不可变的,改成val,就可以修改了
    *
    * */
  case class User(id:String,var name:String )
}
复制代码

 类的继承

复制代码
package scala

object Demo11EX {
  def main(args: Array[String]): Unit = {
    val a = new A("001","张三")
    a.print()


    val lisi = new B("003","李四",24)

    lisi.print()
  }
}
class A(id:String,name:String){
  println("A的默认构造函数")
  val _id :String =id
  val _name:String=name

  def print(): Unit ={
    println(_id+"\t"+_name)
  }
}

/**
  * 类的继承,会继承父类的属性和方法
  *  继承的时候调用父类的构造函数
  *
  * */
class B(id:String,name:String,age:Int) extends A(id,name){
  println("B的默认构造函数")
  val _age :Int=age
}
复制代码

 

posted @   坤坤无敌  阅读(203)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示