快学scala笔记第五章 类

1 scala中简单类的定义和调用

class One {
  private var age:Int=8
  def say(x:Int)=this.age=x
  def hello=println("age:"+age)

}

注意:

scala中没有参数的函数或方法,调用时可以不使用()  ,但是hello方法定义时没有加入(),所以调用时也不能使用();

 def main(args: Array[String]): Unit = {
    var x:One=new One
    x.say(18)
    x.hello

  }

2 scala类属性生成的getter和setter方法

class Hello{
 private var age:Int=8
 var sname:String="hello"
}

通过编译命令编译该文件

> scalac d.scala

生成编译后的文件Hello.class

通过javap命令查询编译成功的字节码文件

>javap -private Hello
Compiled from "d.scala"
public class Hello {
  private int age;
  private java.lang.String sname;
  private int age();
  private void age_$eq(int);
  public java.lang.String sname();
  public void sname_$eq(java.lang.String);
  public Hello();

}

注意:

私有属性生成对应私有的getter和setter方法

重写对属性的get和set方法

class Hello{
  private var age:Int=8
  var sname:String="hello"
  def xage_=(x:Int){
    this.age=x
  }
  def xage=this.age

}

调用

 var x:Hello=new Hello
    x.xage=68

    val y=x.xage

注意:

如果属性是val,该属性只有getter方法

3 Bean属性

首先导入

import scala.beans.BeanProperty
class Three {
 @BeanProperty var age:Int=_
}

调用中证明@BeanProperty标记的属性生成了四个方法

public int age();
public void age_$eq(int);
public void setAge(int);
public int getAge();
public Three();

 var x=new Three
    x.setAge(8)
    x.getAge
    x.age=6

    x.age=66

3 辅助构造器

scala中可以有多个辅助构造器,辅助构造器特点:

A:名称必须是this;

B:辅助构造器中第一句必须通过this调用主构造器或其他已经声明的辅助构造器

class Four {
 def this(age:Int){
   this()
   println("constructor age:"+age)
 }

}

4 主构造器

主构造器的特点A:参数放在类名之后,如果参数包含var或val则该参数被编译成成员属性;

B:在类中的书写的所以语句当做主构造器中的代码;

5 单例对象

 scala类中没有静态方法或静态属性,但是scala的object对象提供class的单个实例,注意单例对象不能提供

构造函数;

object Three {
  def say: Unit ={
    println("three say...")
  }
  def main(args: Array[String]): Unit = {
    Three.say
  }

}

6 伴生对象

在类的同一个文件中提供与类同名的伴生对象,该伴生对象可以被类中方法和属性调用

class Three{
  private var xage:Int=9
  def say: Unit ={
    println("three say...")
    Three.incre
  }


}
object Three {
  def incre={
    printf("ok..........")
  }

}

apply方法返回伴生对象

自定义apply方法,并实例化

class Three(var xname:String){
  println("i am "+xname)
}
object Three{
  def apply(x:String): Three = new Three(x)
}

调用apply方法

val h=Three.apply("xx")

    val h2=Three("abc")



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章