Scala第六天——面向对象编程——类

本文深入探讨Scala中的面向对象编程,包括类的定义、构造方法、内部类、Getter与Setter的使用,以及如何自定义这些访问器。文章详细解释了private[this]的作用,Bean属性的生成,主构造器与辅助构造器的区别,以及嵌套类的特性。通过实例解析,帮助读者更好地理解和应用Scala的面向对象特性。
摘要由CSDN通过智能技术生成

本文部分参考自: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、privateprivate[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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值