Scala笔记整理(三):Scala面向对象——类详解1

  (TOC)

  <人力资源/>   

getter和setter

  

简单类和无参方法

  
  

需要说明的是,官方给出的参考资料对于这方面讲解得十分详细,目前入门来说,不需要达到这样的理解,只需要可以进行开发即可,这一部分我给出的是官方的一些文档说明,但是后面的定制和注解,就直接简单说明能用就好了。

     
 <代码>类PersonOps {
  私人var=0岁//你必须初始化一个字段
  def increment(){年龄+=1}//方法默认是公有的
  def currentAge()=年龄
  } 
  

1)在Scala中,类并不声明为public.Scala源文件可以包含多个类,所有这些类都具有公有可见性。

  

2)如何进行调用?

  
 <代码>对象MainOps {
  def主要(args:数组(String)) {
  新personOps val personOps=personOps.increment ()
  println (“currentAge=比;“+ personOps.currentAge ())
  }
  } 
  

3)不能用类直接调用年龄,因为年龄是私有字段,只能在PersonOps中访问到。

  

4)无参方法

  
 <代码> println (“currentAge=祝辞;”+ personOps.currentAge ())
  println (“currentAge=祝辞;”代码+ personOps.currentAge)  
  
  

建议:对设置值的时候,即改变对象状态值或者状态时使用(),而对于取值来说(不会改变对象的状态和值)去掉()是个不错的风格,这也是我们事例中的方法。

     
 <代码> personOps.increment ()
  println (“currentAge=比;代码”+ personOps.currentAge)  
  

5)你可以通过以不带()的方式声明currentAge来强制这种风格:

  
 <代码>类PersonOps {
  私人var=0岁//你必须初始化一个字段
  def increment(){年龄+=1}//方法默认是公有的
  def currentAge=年龄
  } 
  

结果:这样一来在调用时,必须要用不带()的进行方法调用

  
 <代码> println (“currentAge=祝辞;”代码+ personOps.currentAge)  
  

6)带getter和setter的属性

  

Java中属性定义

  
 <代码类="语言Java ">公共类人士{//这是Java
  私人int年龄;
  公共int getAge(){返回年龄;}
  公共空间setAge (int年龄){this.age=年龄;}
  }
   
  

getter和setter方式比共有字段(公共)好在什么地方呢?

  

之所以说getter和setter方法比公有字段更好,是因为它们让你可以从简单的获?设置机制出发,并在需要的时候做改进。

  scala中

5)的getter和setter方法

  
 <代码>类角色{
  var=0岁
  } 
  

a.Scala生成面向JVM的类,其中有一个私有年龄的字段以及相应的getter方法和setter方法。这两个方法是公有的,因为我们没有将年龄声明为私有的。而对私有字段而言,getter和setter方法也是私有的。

  

。在Scala中,getter和setter分别叫做年龄和age_=例如:

  
 <代码> val角色=新形象
  println (“startAge=比;“+ personA.age)
  的角色。年龄=21
  println (“endAge=比;代码”+ personA.age)  
  

执行下面的命令:

  
 <代码类=" language-shell ">那个PersonOps.scala
  主要\ src \ \ scala \ tw \ tw> javap - p PersonA.class
  代码编译从“PersonOps.scala” 
  

然后会生成下面的内容:

  
 <代码类="语言java ">公共类太瓦。角色{
  私人int年龄;
  公共int年龄();
  公共空间age_ $ eq (int);
  公共tw.PersonA ();
  } 
  

正如你看到的那样,编译器创建了年龄<代码> 和<代码> age_ $ eq>   

  

说明:在Scala中,getter和setter方法并非被命名为getXxx和setXxx,不过它们的用意是相同的。后面会介绍如何生成Java风格的getXxx和setXxx方法,以使得你的Scala类可以与Java工具实现互操作

     

定制的getter/setter方法

  

这部分先不用搞太复杂,直接使用Java版本的getter/setter方法即可,如下面一个类:

  
 <代码>类学生{
  私人var年龄:Int=0
  
  def setAge(年龄:Int):单位={
  这一点。年龄=年龄
  }
  
  def getAge()=年龄
  
  } 
  

测试如下:

  
 <代码> scala>val s=新学生()
  学生:学生=Student@1608bb5d
  
  scala>年代=Student@1608bb5d res200:学生
  
  scala>s.getAge ()
  res201: Int=0
  
  scala>s.getAge
  res202: Int=0
  
  scala>s.setAge (18)
  
  scala>s.getAge
  res204: Int=18 

Scala笔记整理(三):Scala面向对象——类详解1