zoukankan      html  css  js  c++  java
  • scala类

    object是静态的,只能做一次加载,调用时,不需要进行new

    class 类需要做new 新的对象,通过对象进行方法和属性调用
    trait 类是接口

    1、与java类型,class 类里面有变量(类内部声明变量需要声明类型和占位符,或者初始化默认值;在类名后边进行变量定义只需要声明类型)

    package com.cslc.day1
    /*
    * 面向对象
    * 类的定义与使用
    * 构造器
    * 继承与重写
    * 抽象类
    * 伴生类和伴生对象
    * apply
    * case class
    * trait  (接口)
    * */
    
    object FaceClass {
    
      def main(args: Array[String]): Unit = {
        val people =new People
        people.name="meissi"
        people.age=31
        println(people.eat())
        println(people.watchfoobal("CBA"))
        people.printInfo()
      }
    }
    
    
    class People{
      //属性
      var name:String=_
      var age:Int=_
    
      private  [this] val gender="male"
      def printInfo():Unit={
      println("gender is  " + gender)
      }
      def eat(): String ={
        name +" is eating"
      }
      def watchfoobal(teamname:String): String ={
        name +" is watching " +teamname+" games"
      }
    }
    View Code

    2、构造器与附属构造器

    package com.cslc.day1
    
    object ConstructorApp {
      def main(args: Array[String]): Unit = {
        val people=new Person("messi",31)
        println(people.name+" "+people.school)
        val person2=new Person(name = "cluo",age = 33,"M")
        println(person2.name+":",person2.age+":"+person2.gender)
      }
    
    }
    
    //主构造器
    class  Person(val name:String,val age:Int){
      println("person Constructor enter...")
      val school ="ustc"
      var gender:String = _
    
      println("person structor is leaving")
      //附属构造器
      def this(name:String,age:Int,gender:String){
        this(name,age)//附属构造器第一行需要调用主构造器或者其他附属构造器
        this.gender = gender
      }
    }
    View Code

    3、类的继承与变量重写

    package com.cslc.day1
    
    object jichen {
      def main(args: Array[String]): Unit = {
        val s1=new Student("liu",18,"bioinformation")
        println(s1.major)
        println(s1.school)
      }
    }
    //继承Person类,重写变量
    class  Student(name:String,age:Int,val major:String) extends Person(name,age){
      println("student is entr......")
      override val school= "dlut"
      println("student is leaving")
    }
    View Code

    4、抽象类:方法和或者变量只进行了定义没有进行实现,继承抽象类需要完善方法或者变量


     5、case class 通用与模式匹配,使用case class 定义的类不需要进行new

    package com.cslc.day1
    
    object CaseClassApp {
      def main(args: Array[String]): Unit = {
        print(Dog("wangcai",13).age)
      }
    }
    case class Dog(name:String,age:Int)
    
    //通常用于模式匹配
    View Code

    6、伴生类与伴生对象,类名一样,伴生对象直接调用,他是静态的,只能调用一次,默认会调用方法object.apply() ,伴生类需要new 实例,实例()时候,会调用class.apply()

    最佳实践:在伴生对象的apply方法中,声明new 伴生类的实例。

    package com.cslc.day1
    
    object ApplyApp {
      def main(args: Array[String]): Unit = {
        for (i <- 1.to(10)) {
          ApplyTest.incr
        }
        println(ApplyTest.count)
        val b=ApplyTest()  //使用伴生类或者伴生对象加() ,默认使用object.apply()
        val c=new ApplyTest()   //进入class
        c()  //调用class。apply
      }
    }
    /*
    *
    *
    * class 名和object 名称相同,则:伴生对象和伴生类
    * object是一个单例,默认调用object
    *
    * object()  调用object.apply()
    *class new 对象t t() 调用class.apply()
    *
    *
    * 最佳实践:object中的apply中new 一个 class对象
    * */
    class ApplyTest{
      println("class is enter ....")
      println("class is leaving....")
    
      def apply(): Unit ={
        println("class.apply is entering")
      }
    }
    object  ApplyTest{
      println("object is enter ......")
      var count=0
      def incr():Unit ={
          count+=1
    
      }
      println("object is leaving")
    
    
      def apply()={
        println("print object.apply is enter ...")
    
      }
    }
    View Code

  • 相关阅读:
    wpf 3D学习
    vs2010莫名崩溃初探
    Wcf(,service callback client)
    MEF和CompositionContainer学习
    认知Media Queries让浏览器人性化
    移动互联网产品设计的7大误区
    RUP中的迭代模型
    前端工程师的价值体现在哪里?
    做用户研究时,如何挑选合适的用户?
    晒晒 邀请函!感恩节 感谢组织!让我挡上末班车!哈哈!
  • 原文地址:https://www.cnblogs.com/students/p/14225637.html
Copyright © 2011-2022 走看看