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"

  • 相关阅读:
    好文转载—做到更好之前,你需要做得好
    Java中UUID的实现
    利用jQuery UI制作包含文本内容的slider
    JavaScript的陷阱 By 三七
    举例解读云计算三种服务模式SaaS、PaaS和IaaS及其之间关系
    用户管理系统接口文档
    PL/SQL 中文乱码解决方案
    百万级PHP网站架构工具箱
    双缓冲方法解决屏幕刷新闪烁的问题
    JavaScript绘图
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/5673260.html
Copyright © 2011-2022 走看看