本文部分参考自:https://blog.csdn.net/dataiyangu/article/details/98482388
Scala第六天——面向对象编程
自己的话:漆黑的黑夜 表示着威胁 我选择诙谐
工作在堆叠 没兑现归结于那些理解
Scala定义类、构造方法、内部类
一、简单类和无参方法
1.简述:
(1)函数:类外边定义的def
(2)方法:类内定义的def
(3)注意:如果定时的def后的方法名没加(),在调用的时候就不能加();定义def的方法名加了()调用时,可以加()也可以不加()
// 定义类,包含field以及方法
class HelloWorld {
private var name = "leo"
def sayHello() {
print("Hello, " + name) }
def getName = name
}
// 创建类的对象,并调用其方法
val helloWorld = new HelloWorld
helloWorld.sayHello()
print(helloWorld.getName) // 也可以不加括号,如果定义方法时不带括号,则调用方法时也不能带括号
2.详解:
通过 class 进行类的定义。
class Counter {
private var value = 0 // You must initialize the field
def increment() {
value += 1 } // Methods are public by default def current() = value
}
// new Counter() 也可以
val myCounter = new Counter
myCounter.increment()
println(myCounter.current)
注:在 Scala 中,类并不声明为 Public,一个 Scala 源文件可以包含多个类。所有 这些类都具有公有可见性。调用无参方法时,可以加(),也可以不加;如果方法 定义中不带括号,那么调用时就不能带括号。
二、 Getter与Setter
1.简述:
对于 scala 类中的每一个属性,编译后,会有一个私有的字段和相应的
getter、setter 方法生成,比如:
class Person {
var age = 0
}
val fred = new Person
// setter 方法
fred.age = 21
// getter 方法
println(fred.age)
fred.age_=(25)
// getter 方法
println(fred.age)
2.详解:
// 定义不带private的var field,此时scala生成的面向JVM的类时,会定义为private的name字段,并提供public的getter和setter方法
// 而如果使用private修饰field,则生成的getter和setter也是private的
// 如果定义val field,则只会生成getter方法
// 如果不希望生成setter和getter方法,则将field声明为private[this]
class Student {
var name = "leo"
}
// 调用getter和setter方法,分别叫做name和name_ =
val leo = new Student
print(leo.name)
leo.name = "leo1"
三、自定义Getter、Setter
1.简述:
(1)如果只是希望拥有简单的getter和setter方法,那么就按照scala提供的语法规则,根据需求为field选择合适的修饰符就好:var、val、private、private[this]
(2)但是如果希望能够自己对getter与setter进行控制,则可以自定义getter与setter方法
(3)自定义setter方法的时候一定要注意scala的语法限制,签名、=、参数间不能有空格
class Student {
private var myName = "leo"
def name = "your name is " + myName
def name_=(newValue: String) {
println("you cannot edit your name!!!")
}
}
注意:name_与=之间没有空格
val leo = new Student
print(leo.name)
leo.name = "leo1"
2.详解:
如果get set方法不像java中需要显式的去调用,这里可以直接设置和获得
上面的set方法age_和age的效果是一样的。
如果属性为 age,那么 getter 方法名叫 age, setter 方法名为 age_= 你也可以重定义 getter、setter 方法:
class Person2 {
private var privateAge = 0 // Make private and rename def age = privateAge
def age_=(newValue: Int) {
if (newValue > privateAge)
privateAge = newValue; // Can’t get younger }
}
注意: 1、如果字段是私有的,则 getter 和 setter 方法也是私有的。 2、如果字段是 val,则只有 getter 方法被生成,因为val不可变。 3、如果你不需要任何 getter 或 setter,可以将字段声明为 private[this]. 意思就是只有当前的实例可以调用 ![在这里插入图片描述](https://img-blog.csdni