一、Scala类和对象
类是对象的抽象,对象是类的具体实例。类是抽象的,不占用内存,二对象是具体的,占用存储空间,new出来的对象,都在堆当中。
类与对象举例:手机在制作之前肯定是需要一张图纸的,那么那张图纸就是类,一个手机图纸,在不同的商家甚至是统一商家,可以造出不同的手机。
案例演示:
class Student(name:String,age:Int,sex:String) {
var names:String=name
var ages:Int=age
var sexs:String=sex
def study(name:String,age:Int)={
println(ages+"的"+names+"正在看书")
}
}
二、scala继承
scala继承一个基类跟java很相似,但是有些不同:
- 重写一个非抽象方法必须使用override修饰符
- 只有主构造函数才可以往基类的构造函数里写参数。
- 在子类中重写父类方法时,你需要使用override关键字
案例演示:
class Student(name:String,age:Int,sex:String) {
var names:String=name
var ages:Int=age
var sexs:String=sex
def study(name:String,age:Int)={
println(ages+"的"+names+"正在看书")
}
}
class manStudent(name:String,age:Int,sex:String) extends Student(name:String,age:Int,sex:String){
override def study(name: String, age: Int): Unit ={
println(age+"的,姓名为:"+name+"的男孩正在打篮球")
}
}
三、scala单例对象
在scala中没有static这个东西,但是也不能造成功能缺失,scala为我们提供了单例模式的实现方法,那就是使用关键字object。
Scala中使用单例模式的时候,不仅要定义类,还要定义同名的object对象,object对象和类的区别是,他不能带有参数。class类带有的参数,和java中的构造函数类似。
当单例对象和莫各类同一个名称的时候,会被称作为半生对象(companion object)。但是秋安提条件是这两个东西得是在同一个类中。
案例演示:
class Student(name:String,age:Int,sex:String) {
var names:String=name
var ages:Int=age
var sexs:String=sex
def study(name:String,age:Int)={
println(ages+"的"+names+"正在看书")
}
}
object Test{
def main(args: Array[String]): Unit = {
val student=new Student("lyq",22,"male")
def func={
println(student.names)
println(student.ages)
}
func
}
}
四、半生对象
半生对象就是前文中介绍的,同一个类中的class类和object类名字一样,那么object就成为半生对象,半生对象的好处就是创建对象的时候,不用在去new对象,之前创建就可以。
案例演示:
class Person(uname:String,uage:Int) {
println("!!!!!!!!!!!!!!!!Person!!!!!!!!!!!!!!!!!!")
var name=uname
var age=uage
var gender=""
println("##############Person##################")
def this(name:String){
this(name,18)
println("@@@@@@@@@@@@@@@Person@@@@@@@@@@@@@@@@")
}
def this(name:String,age:Int,ugender:String){
this(name,18)
gender=ugender
}
def printMsg():Unit={
println(name,age)
}
}
object Person{
println("&&&&&&&&&&& Object Person &&&&&&&&&&&&&&")
var address:String="JiangSu nanjing"
def apply(uname: String, uage: Int): Unit={println(uname,uage)}
def apply(uname: String, uage: Int,gender:String): Person = new Person(uname, uage,gender)
def apply(uname: String): Person = new Person(uname)
def main(args: Array[String]): Unit = {
val person=new Person("zs",21)
val person2=Person("zs")
val person3=Person("zs",21,"男")
}
}
五、样例类
样例类是用case修饰的类,可以用于匹配模式
案例演示:
case class ClassName(name:String,age:Int)
object MatchTest{
def main(args: Array[String]): Unit = {
//创建不同的对象
val kb07 = new ClassName("kb07",4)
val kb05 = new ClassName("kb05",8)
val kb02 = new ClassName("kb02",14)
val list = List(kb07,kb05,kb02)
//用for循环match去匹配输出不同的值。只有用了case的类才能进行匹配
for(classname <- list){
classname match {
case ClassName("kb07",4)=>println("kb07")
case ClassName("kb05",8)=>println("kb05")
case ClassName(name,age)=>
println("name:"+name," age:"+age)
}
}
}
}