scala-基础之class-03

17 篇文章 0 订阅

创建scala类名为OOPInScala.scala ,并增加object OOPInScala

 

package org.victor.scala.base

/**
  * Company: Huazhong University of science and technology
  * 华中科技大学电气学院聚变与等离子体研究所
  * Version: V1.0
  * Author: Victor
  * Contact: 1650996069@qq.com  2018--2020
  * Software: IntelliJ IDEA
  * File: OOPInScala
  * Time: 2018/10/12 19:45
  * Desc:
  **/
class OOPInScala {

}

创建一个User类 并增加name和age字段
class User{
  var name:String = _ //"_"是代表PlaceHolder
  var age = 25

  //private的使用
  private[this] val gender = "women"
}


//类的构造器,主构造器和附属构造器的使用
//主构造器函数的参数中没有用var 或者val去声明变量,那此时的变量是private[this]级别的,只能被类内部使用
class Dog(val name:String,val age:Int){
  println("this is User class primary constructor")


  /**
    * 附属构造器的使用:
    *
    * 1、附属构造器是使用this来声明的
    *
    * 2、附属构造器必须调用主构造器或者其他附属构造器
    */

  var gender:String = _//在附属构造器中新增属性时必须先申明
  def this(name:String,age:Int,gender:String){
    //调用主构造器
    this(name,age)
    //在附属构造器中新增属性,但是外部不能访问

    this.gender = gender
  }


}


object OOPInScala{

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

    //调用User类并执行
    val user = new User
    user.name = "lichanghong"
    println("user.name:"+user.name)
    println("user.age:"+user.age)

    //下面的语句不能访问gender,可以看到 gender属性是 inaccessible的,
    // 这样使用private[this]定义后的内容可以无法被外部使用了,这样启动很好的保护的作用了
    //println("user.gender:"+user.gender)

    println("====================")

    //调用主构造器
    val dog = new Dog("lichanghong",200);
    println("dog.name:"+dog.name)
    println("dog.age:"+dog.age)


    //调用附属构造器
    //因为传入三个参数,主构造器中只有两个参数,所以这里会调用附属构造器
    val dogdog = new Dog("lichanghongHAA",100,"women")
    println("dogdog.name:"+dogdog.name)
    println("dogdog.age:"+dogdog.age)
    //以下调用失败
    //println("dogdog.gender:"+dogdog.gender)
  }
}

从上面运行的结果我们可以发现scala主构造器特点:

1、主构造器直接跟在类名后面,主构造器中的参数会被编译成类的字段

2、主构造器执行的时候会执行类中的所有不包含在方法体中的语句

=========================================================

结果:

user.name:lichanghong
user.age:25
====================
this is User class primary constructor
dog.name:lichanghong
dog.age:200
this is User class primary constructor
dogdog.name:lichanghongHAA
dogdog.age:100

Process finished with exit code 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值