zoukankan      html  css  js  c++  java
  • Scala中的抽象类

    抽象类

    抽象类中不一定有抽象方法或者抽象字段。

    有抽象字段或者抽象方法的类一定是抽象类。

    子类在实现抽象字段或者抽象方法的时候,不使用override。

    覆盖方法

    覆盖的时候,一定使用override。

    覆盖字段
    抽象字段一定要有类型描述。 覆盖的时候,一定使用override。

     1 /**
     2  * 继承 -- 抽象类
     3  * @author Administrator
     4  */
     5 abstract class person{
     6   var name:String
     7   val age:Int
     8   def show:Int
     9 }
    10 
    11 class student extends person {
    12   //在scala中覆盖一个抽象类中字段时,可以不写override
    13   var name:String = "zhangsan"  //使用var定义的抽象字段只能使用var覆盖
    14   val age:Int = 18  //使用val定义的抽象字段只能使用val覆盖
    15   def show:Int = 100  //使用def定义的方法可以使用val或者def进行覆盖
    16 }
    17 
    18 object TestScala61 {
    19   def main(args: Array[String]): Unit = {
    20     /*
    21     1、抽象类不一定有抽象字段,只需要添加abstract关键字
    22     2、有抽象字段一定是抽象类
    23     3、重写字段的实质是在重写字段的setter、getter方法
    24     */
    25     var c = new student
    26     println(c.show)
    27   }
    28 }
     1 /**
     2  * 继承-构造顺序
     3  * @author Administrator
     4  */
     5 class person1{
     6   val name:String = "lisi"
     7   val age:Int = 10 
     8   lazy val interest:Array[Int] = new Array[Int](age)
     9   println("person1类")
    10 }
    11 
    12 class student1 extends person1{
    13   override val age:Int = 20
    14   println("student1类")
    15 }
    16 
    17 
    18 object TestScala62 {
    19   def main(args: Array[String]): Unit = {
    20     val c = new student1
    21     println(c.name)//打印"lisi"
    22     println(c.age)//打印20
    23     println(c.interest.length)
    24     
    25     /*说明*/
    26     //1、实例化student1类时,发现student1继承了person1
    27     //2、继承person1优先调用person1初始化person1中的字段
    28     //3、初始化到age时发现age字段要被student1中age重写,setter、getter方法为空
    29     //4、初始化interest时需要调用age字段的getter方法,用于初始化数组,由于getter方法没有定义,所以长度为0
    30     //5、student1类开始进行初始化,将20设置进age字段
    31     
    32     //解决方法:在interest前添加lazy--使得该字段在构造对象的最后在进行初始化
    33     
    34   }
    35   
    36 }

     打印输出:

    person1类
    student1类
    lisi
    20
    20

    先打印出父类"person1"然后打印出子类"student1"

  • 相关阅读:
    二分图最大匹配的König定理及其证明
    HDOJ 2389 Rain on your Parade
    HDOJ 1083 Courses
    HDOJ 2063 过山车
    POJ 1469 COURSES
    UESTC 1817 Complete Building the Houses
    POJ 3464 ACM Computer Factory
    POJ 1459 Power Network
    HDOJ 1532 Drainage Ditches
    HDU 1017 A Mathematical Curiosity
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/5673260.html
Copyright © 2011-2022 走看看