scala学习之旅(六):面向对象编程之类

文章地址:http://www.haha174.top/article/details/256593

1.定义一个简单的类

//定义类包含field  方法
 class HelloClass {
   private var name="leo";
  def sayHello(){println("hello"+name)}
  def getName()=name
 }

//创建类的对象并调用其方法

  var hello=new HelloClass
     hello.sayHello()
     println(hello.getName())

2.getter 和setter

1.定义不带private 的var field scala 会自动提供提供public 的set 和get 方法
2.定义带private 的set 和get 方法 scala 会自动生成set 和get 方法 也是private 的
3.如果定义 val field 只会生成 get 方法
4.如果不需要set 和get 方法 则可以将field 声明为private[this]
5.调用set 和get 方法分别石 name 和 name_
6.自定义set 和get
如果只需要简单的set 和get 可以根据scala 的语法选择合适的修饰符即可,
如果需要自定义set get ,自定义set 方法的时候一定要注意scala 的语法限制,签名·=,参数之间不能又空格。
7.java 风格的getter 和setter 方法
如果让scala 生成java 生成setter 和getter 方法,只要给 field 添加 @BeanProperty注解即可 此时会生成4个方法
name:String,name_=(newValue:String):Unit,getString():String,setName=(newValue:String):Unit。

@BeanProperty var age:Int=_;

3.constructor

在Scala中,可以给类定义多个辅助constructor 类似java 中的构造重载,
辅助constructor可以相互调用,而且必须第一行调用主constructor

  def this(name:String){
    this()
    this.name=name
  }
  def this(name:String,age:Int){
    this(name)
    this.age=age
  }

在scala 中主 constructor与类名放到一起的

class HelloClass

主 constructor可以通过类名设定参数和默认值
如果主主 constructor传入的参数什么修饰都没有,如name:String 如果类的内部用到了则会申明private[this] name;否则没有该field 只能被constructor代码使用

4.内部类

在scala 中同样也可以定义内部类,但是与java 不同的是,每个外部类的对象的内部类都是不同的类

/** 
 * 第一种方式 
 * 在内部类通过【外部类.this.成员名称】 访问外部类成员 
 */  
class OuterClass(val name:String){  

   class InnerClass(val name:String){  

      def info = println("Outer name :" + OuterClass.this.name + ",Inner Name :" + name);  
   }  
}  

/** 
 * 第二种方式 
 * 在内部类通过【外部类别名】 访问外部类成员 
 */  
class OuterClass2(val name:String){  
  outer =>  
   class InnerClass2(val name:String){  

      def info = println("Outer name :" + outer.name + ",Inner Name :" + name);  
   }  
}  

object OuterAndInnerClassTest {  

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

    println("第一种访问方式:")  
    val outer1 = new OuterClass("yy")  
    val inner1 = new outer1.InnerClass("xx")  
    inner1.info  
    println("第二种访问方式:")  
    val outer2 = new OuterClass2("yy2")  
    val inner2 = new outer2.InnerClass2("xx2")  
    inner2.info  

  }  
}  

欢迎关注,更多福利

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值