//继承/*
1、基本的继承
2、复写父类中的方法
3、使用匿名子类
*///定义父类classPerson(val name:String,val age:Int){//方法(函数)def sayHello():String = "Hello " + name + " and the age is " + age;
}
//定义子类classEmployee(override val name:String,override val age:Int,salary:Int)extendsPerson(name,age){//重写父类中的sayHello方法overridedef sayHello(): String = "子类中的sayHello方法"
}
objectDemo1 {def main(args: Array[String]): Unit = {
//创建一个Person对象var p1 = new Person("Tom",20)
println(p1.sayHello())
//创建一个子类var p2:Person = new Employee("Mike",25,1000)
println(p2.sayHello())
//创建一个匿名子类,从Person继承var p3:Person = new Person("Jerry",26){
//在匿名子类中,重写父类的方法overridedef sayHello(): String = "匿名子类中的sayHello方法"
}
println(p3.sayHello())
}
}
//抽象类型//父类:抽象 交通工具abstractclassVehicle{//定义一个抽象方法def checkType():String
}
//子类classCarextendsVehicle{//实现抽象方法def checkType():String = {"I am a Car"}
}
classBikeextendsVehicle{//实现抽象方法def checkType():String = {"I am a Bike"}
}
objectDemo2 {def main(args: Array[String]): Unit = {
var v1:Vehicle = new Car
var v2:Vehicle = new Bike
println(v1.checkType())
println(v2.checkType())
}
}
package p1
//父类:抽象abstractclassPerson{//就是一个抽象字段var id:Int
var name:String
}
//一种做法abstractclassEmployee1extendsPerson{//var id:Int = 1var name:String = "No Name"
}
//另一种做法: 定义一个主构造器,在主构造器中,提供抽象字段classEmployee2(var id:Int)extendsPerson{//只提供namevar name:String = "No Name"
}
classDemo3 {
}
九、特质trait:有点像接口、也有点像抽象类
支持多重继承
package p2
//特质:trait//定义第一个traittraitHuman{//定义抽象字段var id:Int
var name:String
//方法:可以是抽象的 也可以不是抽象def sayHello():String = "Hello " + name
}
//定义第二个traittraitAction{//定义一个抽象方法def getActionName():String
}
//定义一个子类:从上面的两个trait继承//关键字: extends ... withclassStudent6(var id:Int,var name:String)extendsHumanwithAction{//实现Action中的getActionNamedef getActionName():String = "Action is Running"
}
objectDemo4 {def main(args: Array[String]): Unit = {
//创建一个学生对象var s6 = new Student6(1,"Tom")
println(s6.sayHello())
println(s6.getActionName())
}
}
十、包和包对象
举例:package ****{
class ****def 函数
val 常量
等等
}