学习scala笔记--7 scala 类基础

 

 

 

 

scala  类基础

 

 

scala> :paste

// Entering paste mode (ctrl-D to finish)

 

 

 

 

class HelloWorld {

private var  name="tomcat"

def sayHello(){

println("hello "+name)

}

def getName = name

}

 

 

 

 

// Exiting paste mode, now interpreting.

 

defined class HelloWorld

 

scala> 

 

scala> var h = new HelloWorld()

h: HelloWorld = HelloWorld@1cd9c2de

 

scala> h.sayHello()

hello tomcat

 

scala> h.getName

res26: String = tomcat

 

定义时 没括号   调用时也不能写括号

scala> h.getName()

<console>:13: error: not enough arguments for method apply: (index: Int)Char in class StringOps.

Unspecified value parameter index.

       h.getName()

 

----------------------------------

 

 

getter  和  setter

 

 

 

scala> :paste

// Entering paste mode (ctrl-D to finish)

 

class student {

var name = ""

}

 

// Exiting paste mode, now interpreting.

 

defined class student

 

 

scala> var s = new student()

s: student = student@4718eb01

 

 

s.name  就相当于 getter

scala> s.name

res30: String = ""

 

 

s.name= --- 相当于setter

 

scala> s.name="tomcat"

s.name: String = tomcat

 

scala> s.name 

res32: String = tomcat

 

 

----------------------------------

 

自定义的 getter  setter

 

 

scala> :paste

// Entering paste mode (ctrl-D to finish)

 

class Student {

 var name =""

 def foo=name

 def foo_=(newName:String){

    name = newName+"!"

}

}

 

// Exiting paste mode, now interpreting.

 

defined class Student

 

 

scala> s.foo

res49: String = ""

 

scala> 

 

scala> s.foo="99"

s.foo: String = 99!

 

----------------------------------

 

 

java 风格的个getter  setter

 

使用 scala.beans.BeanProperty

 

 

scala> import  scala.beans.BeanProperty

import scala.beans.BeanProperty

 

 

scala> :paste

// Entering paste mode (ctrl-D to finish)

 

 

 

class Student{

 

@BeanProperty var name:String =""

}

 

 

 

// Exiting paste mode, now interpreting.

 

defined class Student

 

scala> 

 

scala> 

 

scala> var s =new Student()

s: Student = Student@4130a648

 

scala> s.getName 

res0: String = ""

 

scala> s.getName()

res1: String = ""

 

scala> s.setName("tomcat")

 

scala> s.getName

res3: String = tomcat

 

scala> s.getName()

res4: String = tomcat

 

 

----------------------------------

 

 

 

辅助构造函数 this()

 

 

scala> :paste

// Entering paste mode (ctrl-D to finish)

 

class Student

{

var name=""

var age =0 

 

def this(name:String){

this()

this.name=name

}

 

def  this(name:String,age:Int){

 this(name)

 this.age=age

}

 

}

 

 

 

// Exiting paste mode, now interpreting.

 

defined class Student

 

scala> 

 

scala> 

 

scala> 

 

scala> var s = new Student()

s: Student = Student@7b58d678

 

scala> var s2 = new Student("tomcat")

s2: Student = Student@698e1bf5

 

scala> s2.name

res5: String = tomcat

 

scala> s2.age

res6: Int = 0

 

scala> 

 

scala> var s3 = new Student("hadoop",10)

s3: Student = Student@13d1653

 

scala> s3.name

res7: String = hadoop

 

scala> s3.age 

res8: Int = 10

 

----------------------------------

 

 

主构造函数 

 

 

 

scala> :paste

// Entering paste mode (ctrl-D to finish)

 

class Student(name:String , age:Int){

println(name+"----"+age)

}

 

 

// Exiting paste mode, now interpreting.

 

defined class Student

 

scala> 

 

scala> 

 

scala> var s= new Student("tomcat",20)

tomcat----20

s: Student = Student@2daf650b

 

 

----------------------------------

 

主构造函数  中使用默认值 

 

scala> :paste

// Entering paste mode (ctrl-D to finish)

 

class Student(name:String = "Tom" ,age:Int= 10){

println(name +""+age)

}

 

 

// Exiting paste mode, now interpreting.

 

defined class Student

 

scala> 

 

scala> var s = new Student()

Tom10

s: Student = Student@5304ac92

 

----------------------------------

 

 

内部类 

每个对象的 内部类  被认为是 不同的类

 

 

 

scala> :paste

// Entering paste mode (ctrl-D to finish)

 

class Clazz {

 

class Student(name:String){}

val students = new ArrayBuffer[Student]

def  getStudent(name:String)={ 

new Student(name)

}

}

 

// Exiting paste mode, now interpreting.

 

defined class Clazz

 

scala> 

 

scala> val c1 = new Clazz()

c1: Clazz = Clazz@6048e171

 

scala> val s1 = c1.getStudent("tom")

s1: c1.Student = Clazz$Student@109a5573

 

scala> c1.students += s1

res9: c1.students.type = ArrayBuffer(Clazz$Student@109a5573)

 

scala> 

 

scala> val c2 = new Clazz()

c2: Clazz = Clazz@762cfcc1

 

scala> val s2 = c2.getStudent("jim")

s2: c2.Student = Clazz$Student@772dfe03

 

scala> c2.students += s2

res10: c2.students.type = ArrayBuffer(Clazz$Student@772dfe03)

 

scala> 

 

scala> c1.students += s2

<console>:16: error: type mismatch;

 found   : c2.Student

 required: c1.Student

       c1.students += s2

 

 

----------------------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值