面向对象概述
定义一个类,实际上就是把一类事物的共有的属性和行为提取出来,形成一个物理模型(模版)。这种研究问题的方法称为抽象。
面向对象编程有三大特征,封装、继承和多态
封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法),才能对数据进行操作。
封装的理解和好处
隐藏实现细节,可以对数据进行验证,保证安全合理
如何体现封装
- 对类中的属性进行封装
- 通过成员方法,包实现封装
封装的实现步骤 将属性进行私有化提供一个公用的set方法,用于对属性判断并赋值 提供一个公共的get方法,用于获取属性的值
类的定义
Scala和java一样,都是用关键字class来进行类的声明
这里创建的对象Person,其实就是一个javabean,这种对象在各个调度层之间携带并传递数据
Controller----------->service-------------->dao
bean bean
Controller<-----------service<--------------dao
创建的这些bean一般都只会存在字段,而很少创建一些相关的方法
在Scala中,刚刚创建的这个类,其实就是模拟了java中的javabean,当然在Scala中有一个专门的类结构来表示java中的bean-- case class(样例类),会自动的给其中的字段提供getter和setter方法
自定义属性的get和set方法
Scala中的字段需要自己手动添加get和set方法,但是普通的Scala类并不适合类似java中的JavaBean操作
Bean属性
JavaBean规范把Java属性定义为一堆getFoo和setFoo方法,类似于Java,当你将Scala字段标注为@BeanProperty时,getter和setter方法会自动生成
但是此时的字段不能被private修饰
构造器
- Scala中和类名相同的方法并不是构造器
- Scala的其中一个构造器就在类名的后面,由于是无参的,所以默认省略了(),也就是参数列表。该构造器的方法体和类的定义交织在了一起。Scala不能用类名做构造器,而是使用this关键字来代替这里的类名
- Scala的构造器有两种,一种在类名后面定义,一种在类中使用this关键字来定义。第一种构造器被称之为Scala类的主构造器,第二种构造器被称为Scala类的辅助构造器
- Scala中的辅助构造器的第一句话,必须调用本类的主构造器或者其他辅助构造器
内部类
object InnerClassOps {
def main(args: Array[String]): Unit = {
val outer:Outer = new Outer()
//创建Scala的内部类对象
val inner = new outer.Inner()
inner.show()
}
}
class Outer {
o => //此时的o代表的就是本类对象的引用
val x = 5
class Inner {
val x = 6
def show(): Unit ={
val x = 7
println("x="+x)
println("x="+this.x)