大数据技术之Scala
======第一篇:Scala编程语言=====
Scala语言的面向对象(六)Scala中的继承
Scala和Java一样,使用extends关键字扩展类。
案例一:Employee类继承Person类
案例二:在子类中重写父类的方法
案例三:使用匿名子类
Scala代码实现:
package mianxiangduixiang.lei
/**
* 继承-1
* 父类:Person 人
* 子类:Employee 员工
* 用员工继承Person
*/
class Extends {
}
//定义一个父类
class Person(val name:String,val age:Int){
//定义函数
def sayHello():String="Hello "+name+" and the age is "+age
}
//定义一个子类
//使用override关键字将子类的属性覆盖掉父类的属性
class Employee(override val name:String, override val age:Int, val salary:Int)extends Person(name,age){
override def sayHello(): String = "子类中的sayHello"
}
object Extends{
def main(args: Array[String]): Unit = {
//创建Person对象-父类对象
val person = new Person("Tom",20)
println(person.name+"\t"+person.age)
println(person.sayHello())
//创建Employee对象-子类对象
val employee=new Employee("Mike",22,10000)
println(employee.name+"\t"+employee.age+"\t"+employee.salary)
println(employee.sayHello())
//通过匿名子类来实现继承:没有名字的子类
var p3:Person=new Person("Mary",21){
override def sayHello(): String = "匿名子类中的sayHello"
}
println(p3.sayHello())
}
}
案例四:使用抽象类。abstract关键字
抽象类中包含抽象方法,抽象类只能用来继承。
Scala代码实现
package mianxiangduixiang.lei
/**
* 继承-2
* 抽象类
*/
//父类:抽象类--交通工具类
abstract class Vehicle{
//定义抽象方法-但不需要实现
def checkType():String{
}
}
//子类:自行车、汽车,从父类继承
class Car extends Vehicle{
override def checkType(): String = "I am a car"
}
class Bike extends Vehicle{
override def checkType(): String = "I am a bike"
}
object Extends2 {
def main(args: Array[String]): Unit = {
var v1:Vehicle=new Car
println(v1.checkType())
var v2:Vehicle=new Bike
println(v2.checkType())
}
}
案例五:使用抽象字段(抽象属性)。抽象字段就是一个没有初始值的字段
Scala代码整体实现:
package mianxiangduixiang.lei
/**
* 继承
* 抽象字段
*/
abstract class Person1{
//定义抽象字段
val id:Int
val name:String
//Employee2(val id:Int,val name:String) 主构造器,注意:参数名要和父类中的相同
}
abstract class Employee extends Person1{
}
class Employee2(val id:Int)extends Person1 {
val name:String="no name"
}
object Extends3 {
}