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  
      
  }  
}  

欢迎关注,更多福利

scala学习之旅(六):面向对象编程之类_第1张图片
这里写图片描述

你可能感兴趣的:(scala学习之旅(六):面向对象编程之类)