寒假学习记录8_Scala面向对象编程基础3
我的学习笔记如下:
31、unapply方法用于对对象进行结构操作,与apply方法类似,该方法也会被自动调用。
32、可以认为unapply方法是apply方法的反向操作,apply方法接受构造参数变成对象,而unapply方法接受一个对象,从中提取值。
33、如果一个类包含没有实现的成员,则必须使用abstract关键词进行修饰,定义为抽象类。
34、没有实现的成员是指没有初始化的字段或者没有实现的方法。
35、抽象类中的抽象字段必须要有声明类型。
36、与Java不同的是,Scala里的抽象方法不需要加abstract修饰符。
37、抽象类不能实例化,只能作为父类被其他子类继承。
38、像Java一样,Scala只支持单一继承,而不支持多重继承,即子类只能有一个父类。在类定义中使用extends表示继承关系。
39、定义子类时需要注意以下几个方面:
①重载父类的抽象成员(包括字段和方法)时,override关键字是可选的;而重载父类的非抽象成员时,override关键字是必选的。建议重载抽象成员时省略override关键字,这样做的好处是,当父类的抽象成员被实现为非抽象成员时,会出现编译错误,使得用户能及时发现父类的改变。
②只能重载val类型的字段,而不能重载var类型的字段。因为var类型本身就是可变的,所以,可以直接修改它的值,无需重载。
③对于父类构造器中用var或val修饰的参数,由于其相当于类的一个字段,因此,如果子类的主构造器与父类的主构造器有相同修饰姓名的参数,则必须在子类的参数前加override修饰符,或者在子类的相同名称参数前去掉val或var,使其不自动成为子类的字段。
40、子类不仅仅可以派生自抽象类,还可以派生自非抽象类,如果某个类不希望被其他类派生出子类,则需要在类定义的class关键字前加上final关键字。子类如果没有明显的指明父类,则其默认的父类为AnyRef。
41、关于Scala的类层级结构。位于最顶层的是名为Any的类。Any有两个子类:AnyVal和AnyRef。前者是所有值类型的父类,后者是所有引用类型的父类。
42、在Scala类层级结构的最顶层,有两个特殊类型:Null和Nothing。Null是所有引用类型的子类,其唯一的实例为null,表示一个“空”对象,可以赋值给任何引用类型的变量,但不能赋值给值类型的变量。Nothing是所有其他类型的子类,包括Null。Nothing没有实例,主要用于异常处理函数的返回类型。
43、类Option是一个抽象类,有一个具体的子类Some和一个对象None,其中,前者表示有值的情形,后者表示没有值。
45、所谓参数化类型,是指在类的定义中包含一个或几个未确定的类型参数信息,其具体的类型将在实例化类时确定。
浙公网安备 33010602011771号