1. 继承
// 父类
class Person(val name:String, val age:Int) {
def sayHello():String = name + age;
}
// 子类
// 如果希望使用子类中的值,去覆盖父类中的值,需要加override关键字
class Employee(override val name:String,override val age:Int,val salay:Int)
extends Person(name,age) {
}
object Employee{
def main(args:Array[String]) {
val pr = new Person("kevin",23)
println(pr.sayHello)
val ps = new Employee("kai",23,6000)
println(ps.sayHello)
}
}
运行结果
// 如果希望使用子类中的方法,去覆盖父类中的方法,需要加override关键字
class Employee(override val name:String,override val age:Int,val salay:Int)
extends Person(name,age) {
def sayHello():String = name + age;
}
object Employee{
def main(args:Array[String]) {
val pr = new Person("kevin",23)
println(pr.sayHello)
val ps = new Employee("kai",23,6000)
println(ps.sayHello)
// 使用匿名子类来创建新的对象
val pe:Person = new Person("kevin",23) {
override def sayHelllo():String = "kevin"
println(pe.sayHello)
}
}
}
运行结果
2. 抽象
// 使用抽象类。抽象类中包含抽象方法,抽象类只能用来继承
// 父类
abstract class Vihicle {
def checkType():String
}
class Car extends Vihicle {
def checkType():String = {"i am car"}
}
class Bysical extends Vihicle {
def checkType():String = {"i am by"}
}
object {
def main(args:Array[String]) {
val c = new Car
println(v.checkType());
val b = new By
println(b.checkType());
}
}
运行结果
// 使用抽象字段,抽象字段就是一个没有初始值得字段
abstract class Person {
// 抽象字段,并且没有get,set方法
val age:Int
val name:String
}
3. 特质(trait)
// trait就是抽象类。trait跟抽象类最大的区别就是trait支持多继承,使用with关键字连接
// 第一个抽象类
trait Man {
val id:Int
val name:String
val name:String
def sayHello():String = "hello" + name;
}
// 第二个抽象类
trait Actions {
// 抽象的方法
def getActionName():String
}
// 子类,提供一主构造函数
class Stu(val id:Int, val name:String) extends Man with Actions {
def getActionName():String = {"hello"};
}
// 测试类
object Stu {
def main(args:Array[String]) {
var s = new Stu(123,"kk")
println(s.sayHello)
println(s.getActionName)
}
}
运行结果