SCALA-DAY04(面向对象)

1 伴生类和伴生对象

package com._51doit.day04.demo.oob

/**
 * FileName: Demo1
 * Author:   多易教育-DOIT
 * Date:     2020/11/3 0003 
 * Description:  类
 * 这是一个类  需要new 实例化  实例化以后才能调用类中的属性和方法
 */
class Demo1 {
  private val id = 123
}
package com._51doit.day04.demo.oob

/**
 * FileName: Demo2
 * Author:   多易教育-DOIT
 * Date:     2020/11/3 0003
 * Description: object修饰的
 * object文件中的内容是静态的 不需要new来实例
 * 可以直接访问 object中的属性和方法
 */
object Demo2 {
 private val  id = "abc"

}
package com._51doit.day04.demo.oob

/**
 * FileName: Test1
 * Author:   多易教育-DOIT
 * Date:     2020/11/3 0003
 * Description: 
 */
object Test1 {
  def main(args: Array[String]): Unit = {
    val demo = new Demo1
    // 在Test1中试图访问Demo1类中私有的属性被拒接
   // println(demo.id)
    //在Test1中试图访问object Demo2类私有的属性被拒接
   // println(Demo2.id)

  }

}

伴生类和伴生对象 

package com._51doit.day04.demo.oob

/**
 * FileName: Demo3
 * Author:   多易教育-DOIT
 * Date:     2020/11/3 0003 
 * Description:
 * class 名字
 * object 名字
 * 如果名字先相同在同一个文件中
 * 那么 : class的Demo3是object的Demo3的伴生类
 *       object的Demo3是class的Demo3伴生对象
 * 一般情况 伴生类和伴生对象同时出现
 *   可以互相访问彼此的私有内容
 */
class Demo3 {
 private val age = "AAA"
  Demo3.name
}

object  Demo3{
  private val name = "AAA"
   new Demo3().age
}

2 类的组成结构

package com._51doit.day04.demo.oob

/**
 * FileName: Demo4
 * Author:   多易教育-DOIT
 * Date:     2020/11/3 0003 
 * Description: 类结构
 */
class Demo4 {
  // 成员变量
  val name = "zss"
  // 成员方法
  def add(x:Int,y:Int):Int={
    // 局部变量
    val z  = 123
    x+y
  }
  // 成员函数
  val f = (x:String)=>{
    // 局部变量
    val y  = 123
    x.toUpperCase
  }
  // 成员内部对象
  object  A{

  }
  // 成员内部类
  class  B{
  }
  // 成员代码块
  {
  }
}

object  Demo4{
  // 成员变量
  val name = "zss"
  // 成员方法
  def add(x:Int,y:Int):Int={
    x+y
  }
  // 成员函数
  val f = (x:String)=>{
    x.toUpperCase
  }
  // 成员内部对象
  object  A{

  }
  // 成员内部类
  class  B{

  }
  // 成员代码块
  {

  }

}

3 构造器

package com._51doit.day04.demo.oob.construction

/**
 * FileName: Demo1
 * Author:   多易教育-DOIT
 * Date:     2020/11/3 0003 
 * Description:
 * 类有一个默认的空参主构造器
 *  声明的时候 () 可以省略
 *  调用的时候()可以省略
 *  1  类有主构造器
 *  2 类的构造器的定义方式  def this(参数列表){
 *                         先调用其他构造器
 *  }
 */
class Demo1 {
  def this(str:String){
     this()
  }

  def this(str:String ,a:Int){
    this("str")
  }


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

    val demo1 = new Demo1
    val demo2 = new Demo1("abc")
    val demo3 = new Demo1("", 12)


  }

}
package com._51doit.day04.demo.oob.construction

/**
 * FileName: Demo2
 * Author:   多易教育-DOIT
 * Date:     2020/11/3 0003 
 * Description:
 * 类有一个默认的空参主构造器
 * 声明的时候 () 可以省略
 * 调用的时候()可以省略
 * 1  类有主构造器
 * 2 类的构造器的定义方式  def this(参数列表){
 * 先调用其他构造器
 * }
 * 3 定义一个类  定义柱构造器有三个参数
 *   3.1 可以使用val var 修饰参数
 *   3.2 可以不使用  不使用val var修饰的参数是局部变量
 * 4 建议写一个柱构造器   定义该有属性   默认是有get方法的
 * 5 再给类定义一个空参的辅助构造器  调用主构造器为属性赋默认值
 * 6 使用val修饰的属性是成员属性   但是只能get和初次赋值
 *   使用var修饰的属性是成员属性   有get方法 也可以再赋值
 */
class Demo2(val name:String,var age:Int ,val id:Int) {

 /* def this(str:String){
    this(str,1,1)
  }*/

  def this(){
    this("",-1,-1)
  }
  override def toString = s"Demo2($name, $age, $id)"
}
package com._51doit.day04.demo.oob.construction

/**
 * FileName: Teacher
 * Author:   多易教育-DOIT
 * Date:     2020/11/3 0003 
 * Description: 
 */
class Teacher(val id: Int, var name: String, var job: String, var sal: Double) {
  // 初始值
  def this() {
    this(-1, "", "", -1d)
  }

  override def toString = s"Teacher($id, $name, $job, $sal)"
}

package com._51doit.day04.demo.oob.construction

/**
 * FileName: Coder
 * Author:   多易教育-DOIT
 * Date:     2020/11/3 0003 
 * Description:
 * 在创建对象的时候给属性赋值
 *  java  类 属性  赋值
 *    在构造器中定义成员属性
 *    调用构造器传入实参   get
 */
class Coder {
  var name:String = "zss"
  var age:Int = _
  def  this(str:String , age:Int){
    this()
    this.name = str
  }


}

猜你喜欢

转载自blog.csdn.net/qq_37933018/article/details/109472776