栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Scala类和对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Scala类和对象

Scala包对象

类的定义:
Scala类的定义和Java基本一致,均是通过class来定义一个类,但是Scala没有public关键字,即每个定义的类默认都是public,且一个.scala文件中可以有多个public类.

方法和属性访问权限和java区别
1、Scala中默认的访问权限是public 但是Scala中没有public关键字
2、protected为受保护权限,Scala中protected比Java更严格,同类和子类可以访问,同包则不可以访问
3、private[包名]可以增加访问权限,改包下的其他类也可以使用

重写父类方法
在子类中方法重定义的前面增加override即可

创建对象
通过new关键字创建一个对象,如果创建的对象没有构造参数,可以省略小括号

构造器
1、主构造器
主构造器在类名后面,类体之前增加一个形参列表,作为主构造器

//注意这里必须加上var 或 val,代表name和age作为类属性,如果不加则只是形参
class Student(var name:String,var age:Int){ //主构造器
  def say():Unit={
    print(s"我叫${name},今年${age}岁")
  }
}
//测试
object HelloScala {
  def main(args: Array[String]): Unit = {
    var student=new Student("小白",18)
    student.say()
  }
}

结果:

2、辅助构造器
辅助构造器必须直接或者间接调用主构造器。
辅助构造器名称必须是this,且辅助构造器可以有多个,辅助构造器之间通过参数类型和个数来区分。
辅助构造器不能直接创建对象,其实质上是直接或间接调用了主构造器方法构造对象。
构造器调用其他构造器,被调用者必须提前声明

class Student(){ //主构造器
  var name:String= _
  var age:Int= _
  //辅助构造器
  def this(name:String)={
    //必须先通过主构造器创建对象
    this()
    //然后才是辅助构造器对这个对象自身的操作
    this.name=name
    this.age=1000
  }

  def say():Unit={
    print(s"我叫${this.name},今年${this.age}岁")
  }
}

//测试
object HelloScala {
  def main(args: Array[String]): Unit = {
    //这里调用了辅助构造器,然后辅助构造器先调用主构造器,自己另外进行修改
    var student=new Student("小白")
    student.say()
  }
}

Scala抽象类的继承和重写

abstract class ss {
  var s: String="小白"
  val a:Int=18
  def test():Unit
}

//测试
object HelloScala {
  def main(args: Array[String]): Unit = {
   var s1=new ss {
     //s由于在抽象类中不是抽象属性,且用var修饰,所以在这里不可以重写,只能直接赋值
      s = "小白1号"
     //a在抽象类中不是抽象属性,但他是val修饰,所以要改变值的话必须重写
      override val a=18
      override def test(): Unit = print(s+"今年"+a+"岁了")
    }
    s1.test()
  }
}

伴生对象(单例对象)

class修饰的是类,object修饰的是单例对象!由于class类中没有static关键字,即没有静态方法属性,所以为了与Java交互,Object对象内存储的方法和属性全部默认相当于Static,这也是为什么main方法不能写在class类中,而必须写在object对象中的原因了。单例对象对应的类叫做伴生类

//单例对象的定义
object Person {
  //定义属性和方法

  //main方法也只能在单例对象中定义
}


伴生类和伴生对象应在同一个文件夹内

伴生对象测试

object test {
  def main(args: Array[String]): Unit = {
   var student= new Student("小白",18)
   student.info()
  }
}

//伴生类
class Student(var name:String,var age:Int){
  def info():Unit={
    print(s"${this.name}今年${this.age}岁了,就读于${Student.school}")
  }
}

//伴生对象
object Student{
  var school:String="北京大学"
}

Scala单例模式

object test {
  def main(args: Array[String]): Unit = {
    var student=Student.getInstance()
    student.info()
  }
}

class Student private (var name:String,var age:Int){
  def info():Unit={
    print(s"${this.name}今年${this.age}岁了,就读于${Student.school}")
  }
}

object Student{
  var school:String="北京大学"
  private val student:Student=new Student("小白",18)
  def getInstance():Student=student
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号