经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Scala » 查看文章
Scala中的类学习
来源:cnblogs  作者:codegeekgao  时间:2018/9/25 20:22:18  对本文有异议

Scala中的类学习

从java了解类的情况下,了解Scala的类并不难。Scala类中的字段自动带getter和setter方法,用@BeanProperty注解生成javaBean对象的getXXX与setXXX方法

  • 构造Scala的类
  1. class Counter {
  2. // 初始化字段值value
  3. private var value = 0
  4. // 方法默认是public的
  5. def increment() {
  6. value +=1
  7. }
  8. def current() = value
  9. }
  10. Scala中类不必声明为publicScala源文件可以包含多个类,这些类都是默认public的。
  11. // 构造对象调用Counter
  12. val counter = new Counter()
  13. // 一般习惯对改值器使用(),对取值器不适用()
  14. counter.increment()
  15. println(counter.current)
  • 构造类setXXX与getXXX
  1. public class Person {
  2. private int age;
  3. public int getAge() {return age}
  4. public void setAge(int age) {this.age =age}
  5. // 在java中使用set,get方法对属性进行修改获取是比较好的一种方式。Scala中每个字段默认提供getter和setter方法
  6. // get方法
  7. def age = privateAge
  8. // set方法
  9. def age_(newValue: Int): Unit = {
  10. if (newValue > privateAge) {
  11. privateAge = newValue
  12. }
  13. }
  14. // junit的测试
  15. @Test
  16. def testCounter(): Unit = {
  17. val counter = new Counter()
  18. counter.increment()
  19. println(counter.current())
  20. counter.age_(10)
  21. println(counter.age)
  22. // 类私有的自动无法创建对象.属性调用
  23. }
  24. // Scala的字段加@BeanProperty
  25. import scala.reflect.BeanProperty
  26. class Person {
  27. @BeanProperty
  28. // 默认会生成get/set方法
  29. var name:String =_
  30. }
  • 构造器
  1. 定义以this开头的是辅助构造器
  2. /**
  3. * 辅助构造器
  4. *
  5. * @param username
  6. */
  7. def this(username: String) {
  8. this()
  9. this.username = username
  10. }
  11. /**
  12. * 辅助构造器
  13. * @param username
  14. * @param score
  15. */
  16. def this(username: String, score: Int) {
  17. // 调用上一个构造器
  18. this(name)
  19. this.score = score
  20. }
  21. // 3种方法构建对象
  22. val p1 = new Person
  23. val p2 = new Person("Bob")
  24. val p3 = new Person("Bob",24)
  25. // 构建主构造器
  26. class Person(val name:String="",val age:Int=10) {
  27. println("这是构造方法")
  28. def des = "name="+name+",age="+age
  29. }
  30. val pserson = new Person("haha",12) 将会执行主构造方法
  • 内部类

    和java类似,Scala中也有内部类,但是比java更丰富些,Scala中调用的方式是new OuterClass.innerClass而java中式outClass.new InnerClass()

  1. class NetWork {
  2. class Member(val name: String) {
  3. val contacts = new ArrayBuffer[Member]
  4. }
  5. private val members = new ArrayBuffer[Member]
  6. def join(name: String) = {
  7. val m = new Member(name)
  8. members+=m
  9. m
  10. }
  11. }
  12. val beijing = new network
  13. val xian = new network
  14. val s1 = beijing.join("Bob")
  15. val s2 = beijing.join("Michael")
  16. // 同一种类型可以同一个集合
  17. s1.conttacts +=s2
  18. val s3 = xian.join("Alice")
  19. // 不可以将s3添加到s1中,因为不是同一个Network对象
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号