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
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值