目录:
*1:Scala面向对象
*2:构造器:
*3:继承:
*4:伴生
1、Scala面向对象:
类里面定义的val,new新对象的时候也是不能更改的,用占位符的时候,需要在前面加上具体的数据类型,否则推导不出来:
private[this]后类里面的属性是私有化的,在类外面不能被调用:
object SimepleObjectApp {
def main(args: Array[String]): Unit
=
{
val peopel=new Peopel
peopel.name="等你来"
println(peopel.name+":"+peopel.age+":")
println(peopel.code())
peopel.pickgirl
peopel.printInfo()
}
class Peopel{
//类里面定义属性
var name:String =_
val age =10
private[this] val gender="male"
def printInfo(): Unit ={
println("gender:"+gender)
}
def code()={
name+"coding..."
}
def pickgirl: Unit ={
println(name+"pinckgirling...")
}
}
2、构造器:
new的时候就要用到构造方法
附属构造器:主里面有的参数直接继承过来;
第一行必须要调用已有的主构造器,或者附属构造器;
this()必然是构造器
object ConstruorApp {
def main(args: Array[String]): Unit = {
//new的时候就要用到构造方法
val person=new Person("高飞",30)
println(person.name+":"+person.age+":"+person.school)
val person2 = new Person("高达上",30,"男")
println(person2.name+":"+person2.age+":"+person2.school+":"+person2.gender)
}
//主构造器
class Person(val name:String,val age:Int){
println("-----person enter-----------")
val school="ustc"
var gender:String=_
println("------person leave-----------")
//附属构造器:主里面有的参数直接继承过来;
//第一行必须要调用已有的主构造器,或者附属构造器;
//this()必然是构造器
def this(name:String,age:Int,gender:String){
this(name,age) //这个调用的是Class Person里的;
this.gender=gender //this.gender 是类里面的属性;这个对象传进来给对象
}
}
}
3、继承/抽象:
3.1继承
在继承的时候:子类继承父类,运行的时候也要运行完父类东西
新输入参数需加上数据类型,
override 重写
class Student(name:String,age:Int,var major:String) extends Person(name,age)
override def toString="student to string-----" //子类重写方法
override val school: String = "蓝翔" //子类重写属性
new对象出来的返回值是:包+类+哈希码
3.2抽象类
- 抽象类,一个或者多个方法只有定义,没有实现
- 不能直接使用,需要具体实现
ALT+ENTER 实现方法`
只能用具体实现的类来实例化
4、伴生对象与伴生类
在前面单例对象的基础之上,我们在object Student所在的文件内定义了一个class Student,此时object Student被称为class Student的伴生对象,而class Student被称为object Student的伴生类
伴生对象与伴生类本质上是不同的两个类,只不过伴生类与伴生对象之间可以相互访问到对主的成员包括私有的成员变量或方法
4.1、apply
通过利用apply方法可以直接利用类名创建对象,例如,可以通过val intList=List(1,2,3)这种方式创建初始化一个列表对象,其实它相当于调用val intList=List.apply(1,2,3),只不过val intList=List(1,2,3)这种创建方式更简洁一点,但我们必须明确的是这种创建方式仍然避免不了new,它后面的实现机制仍然是new的方式,只不过我们自己在使用的时候可以省去new的操作。