Scala的组合与继承
主要讲述的是Scala类的语法,包括抽象类和类的继承,组合,多态和绑定,以及一些小的知识点,重写父类的方法等。
组合:两个类都是继承同一个父类,那么这两个类就是组合关系。
继承:子类使用extends继承父类,那么这两个类就是继承关系。
多态:一个父类被多个子类继承,以不同的形式展示。
绑定:new一个子类的对象指向父类,但是该对象调用方法的时候,调用的还是子类的方法,和指向没有关系。
/** * @Author:Alex_lei * @Description: 抽象类,类的继承和方法的重写及如何调用父类的构造器 */ object Abstract_class { def main(args: Array[String]): Unit = { val ae = new ArrayElement(Array("Alex","Lei")) ae.contents println(ae.height) println(ae.width) val le = new LineElement("1234567") println(le.height) println(le.width) } } abstract class Element{ /** * 无参数方法 * @return */ def contents:Array[String] val height:Int = contents.length val width:Int = if(height==0) 0 else contents(0).length def demo = println("I am Element") } class ArrayElement(conts:Array[String]) extends Element{ /** * 无参数方法 * 重写contents方法 * @return */ override def contents: Array[String] = conts override def demo = println("I am ArrayElement") /** * 可以将父类的方法变为字段,因为scala里的字段和方法属于相同的命名空间 */ //val contents: Array[String] = conts } /** * 调用超类的构造器,只要简单的把要传递的参数或参数列表放在超类名之后的括号里即可 * @param s */ class LineElement(s:String) extends ArrayElement(Array(s)) { override val height: Int = 1 override val width: Int = s.length override def demo = println("I am LineElement") }
object Polymorphism { def main(args: Array[String]): Unit = { /** * 多态就是多个子类可以继承同一个超类,以多种形式展示 */ val e1:Element = new ArrayElement(Array("Alex","Lei")) val e2:Element = new LineElement("ddddd") val e3:Element = new UniformElement('x',2,0) /** * 动态绑定指的是,被调用的实际方法实现取决于运行期对象基于的类 * 这里使用demo函数测试 */ e1.demo //I am ArrayElement e2.demo //I am LineElement e3.demo //I am UniformElement /** * 当希望一个成员不被继承的时候,我们可以使用final关键字进行修饰 */ } } class UniformElement( ch:Char, override val width:Int, override val height:Int) extends Element{ private val line = ch.toString * width override def contents: Array[String] = Array(line) override def demo = println("I am UniformElement") }