scala面对对象学习笔记

一、面向对象
scala中没有static
object对象定义的方法和变量都是静态的
可以直接通过对象.方法|变量
scala的object叫对象
在scala中object都是单例的(一个类只能实例化一个对象)
(注:不能够new它的实例,构造方法是私有的)
二、class
定义:class类型
eg:

		class Student{
			var name : String 
			//数据可变,用var(对外提供了setter和getter方法)
			//使用val需初始化值,且不可修改(对外只提供getter方法)
			}

调用时可直接类名。变量名
eg:

val student = new Student()
		student.name = "王八"

三、scala类的主辅构造器
1、跟在类后的构造器为主构造器
eg:

class Student(val name : String,val age : Int){}//若属性前什么都不加,则该属性仅仅为一个局部变量

2、辅助构造器
除了主构造器外,其他的构造器都是辅助构造器
eg:

class Student(var name : String,var age : Int){
	
		var gender:Int = _
		
		//定义一个辅助构造器使用this关键字
		//在辅助构造器中心必须先调用主构造器
		def this(gender : Int) = {
			this(name,age)
			this.gender = gender
		}
		
		def this(name : String,age : Int,gender : Int){
			this(name,age)
			this.gender = gender
		}
		
	}

3、空参构造器
类后面什么都不加默认会有一个空参构造器

四、成员属性、成员方法、构造器、类访问权限
1、成员属性访问权限
1)成员属性前若有private修饰,意味该属性是私有的,外部无法访问,伴生对象除外。
伴生对象:对象名称和类名称一致
伴生类:类名称和对象名称一致
注:伴生对象和伴生类必须在同一文件中
eg:

class Student(private val name : String){}
			Object Student(){}

2)成员属性前有private[this]修饰,表示私有,别人不能访问,包括伴生对象
eg:

class Student(private[this] val name : String){}

2、成员方法访问权限(等同于成员属性)
3、构造器访问权限(等同于成员属性)
4、类的访问权限
1)类如果使用private修饰,同一包及其子包都可以访问,加[this]不影响结果
2)private[包名],在包下所有包都可以访问

五、apply
调用对象()时,默认调用的对象中的apply方法
eg:

def apply():Person = {
			new Person(name = "lisi")
		}
		def main(args: Array[String]): Unit = {
			val person = Person.apply()
		}

eg:

def apply(name : String):Person = new Person(name)

六、scala中特质的定义 Trait及抽象类
1)Trait
类似java中的interface接口,不同于java,trait可有具体的方法实现(jdk1.8+接口也可定义具体的方法实现)
eg:

trait Human{
			def play(str : String):Unit //只定义一个方法,无具体实现,若没有指定返回值,默认为Unit
			def eat(food : String):Unit=println("eat "+food)//定义一个带具体实现的方法
		}

可使用with实现trait
eg:

class Dog extends 抽象类1 with trait2

动态混入某一特质
eg:

val dog = new Dog() with trait1 //若trait1中有无具体实现方法,需将方法实现

2)抽象类
使用abstract关键字修饰,extends继承抽象类
重写方法
eg:

override def run : Unit = {.....}

override关键字:
1)父类方法没有具体实现时,可省略
2)父类方法有具体实现时,不可省略

注意:如果一个类没有显示的继承一个抽象类的话,可直接使用extends一个特质
(extends后可为特质,抽象类,但with后不能为抽象类)

七、final关键字
1)final修饰的类不能被继承
2)final修饰的方法不能被重写
3)final修饰的变量不能被重新赋值

八、type关键字
eg:

Type s = String //s表示String,s相当于String类型的一个别名
	

Type关键字可以和trait结合使用
eg:

trait A {
			type T
			def display(s:T)
		}
class B extends A {
			override Type T = Int
			override def display(s:T):Unit=......
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值