1 Scala继承的基本语法

class 子类名 extends 父类名 { 类体 }

class Person {
var name : String = _
var age : Int = _
def showInfo(): Unit = {
println("学生信息如下:")
println("名字:" + this.name)
}
} class Student extends Person {
def studying(): Unit = {
println(this.name + "学习 scala中....")
}
}

Scala继承给编程带来的便利

1)代码的复用性提高了

2)代码的扩展性和维护性提高了

scala子类继承了什么,怎么继承了?

子类继承了所有的属性,只是私有的属性不能直接访问,需要通过公共的方法去访问

object Extends02 {
def main(args: Array[String]): Unit = {
val sub = new Sub()
sub.sayOk()
}} class Base {
var n1: Int = 1
protected var n2: Int = 2
private var n3: Int = 3
def test100(): Unit = {
println("base 100")
}
protected def test200(): Unit = {
println("base 200")
}
private def test300(): Unit = {
println("base 300")
}
}
class Sub extends Base {
def sayOk(): Unit = {
this.n1 = 20
this.n2 = 40
println("范围" + this.n1 + this.n2)
}}

2 重写方法

说明: scala明确规定,重写一个非抽象方法需要用override修饰符,调用超类的方法使用super关键字

class Person {
var name : String = "tom"
def printName() {
println("Person printName() " + name)
}
}
class Emp extends Person {
//这里需要显式的使用override
override def printName() {
println("Emp printName() " + name)
super.printName()
}
}

3 Scala中类型检查和转换

要测试某个对象是否属于某个给定的类,可以用isInstanceOf方法。用asInstanceOf方法将引用转换为子类的引用。classOf获取对象的类名。

1)classOf[String]就如同Java的 String.class 。

2)obj.isInstanceOf[T]就如同Java的obj instanceof T 判断obj是不是T类型。

3) obj.asInstanceOf[T]就如同Java的(T)obj 将obj强转成T类型。

类型检查和转换的最大价值在于:可以判断传入对象的类型,然后转成对应的子类对象,进行相关操作,这里也体现出多态的特点。

4 Scala中超类的构造

Scala超类的构造说明

1) 类有一个主构器和任意数量的辅助构造器,而每个辅助构造器都必须先调用主构造器(也可以是间接调用.),这点在前面我们说过了。

class Person {
var name = "zhangsan"
println("Person...")}
class Emp extends Person {
println("Emp ....")
def this(name : String) {
this // 必须调用主构造器
this.name = name
println("Emp 辅助构造器~")
}}

2) 只有主构造器可以调用父类的构造器。辅助构造器不能直接调用父类的构造器。在Scala的构造器中,你不能调用super(params)

class Person(name: String) { //父类的构造器
}
class Emp (name: String) extends Person(name) {// 将子类参数传递给父类构造器,这种写法√ // super(name) (×) 没有这种语法
def this() {
super("abc") // (×)不能在辅助构造器中调用父类的构造器
}
}

5  覆写字段

基本介绍

在Scala中,子类改写父类的字段,我们称为覆写/重写字段。覆写字段需使用 override修饰。

Scala覆写字段快速入门

   

覆写字段的注意事项和细节

1) def只能重写另一个def(即:方法只能重写另一个方法)

2) val只能重写另一个val 属性 或 重写不带参数的def

3) var只能重写另一个抽象的var属性

 

抽象属性:声明未初始化的变量就是抽象的属性,抽象属性在抽象类

var重写抽象的var属性小结

1) 一个属性没有初始化,那么这个属性就是抽象属性

2) 抽象属性在编译成字节码文件时,属性并不会声明,但是会自动生成抽象方法,所以类必须声明为抽象类

3) 如果是覆写一个父类的抽象属性,那么override 关键字可省略 [原因:父类的抽象属性,生成的是抽象方法,因此就不涉及到方法重写的概念,因此override可省略]

6 抽象类

在Scala中,通过abstract关键字标记不能被实例化的类。方法不用标记abstract,只要省掉方法体即可。抽象类可以拥有抽象字段,抽象字段/属性就是没有初始值的字段

快速入门案例

抽象类基本语法

说明:抽象类的价值更多是在于设计,是设计者设计好后,让子类继承并实现抽象类(即:实现抽象类的抽象方法)

Scala抽象类使用的注意事项和细节讨论

1)抽象类不能被实例

2)抽象类不一定要包含abstract方法。

3)也就是说,抽象类可以没有abstract方法 一旦类包含了抽象方法或者抽象属性,则这个类必须声明为abstract

4)抽象方法不能有主体,不允许使用abstract修饰。

5) 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法和抽象属性,除非它自己也声明为abstract类。

6)抽象方法和抽象属性不能使用private、final 来修饰,因为这些关键字都是和重写/实现相违背的。

7)  抽象类中可以有实现的方法.

8) 子类重写抽象方法不需要override,写上也不会错.

7 匿名子类

和Java一样,可以通过包含带有定义或重写的代码块的方式创建一个匿名的子类.

 

8 继承层级

subtype : 子类型

implicit Conversion 隐式转换

class hierarchy : 类层次

继承层级图小结

1) 在scala中,所有其他类都是AnyRef的子类,类似Java的Object。

2)AnyVal和AnyRef都扩展自Any类。Any类是根节点

3)Any中定义了isInstanceOf、asInstanceOf方法,以及哈希方法等。

4)Null类型的唯一实例就是null对象。可以将null赋值给任何引用,但不能赋值给值类型的变量

5)Nothing类型没有实例。它对于泛型结构是有用处的,举例:空列表Nil的类型是List[Nothing],它是List[T]的子类型,T可以是任何类。

Scala 面向对象(六):面向对象的特征二:继承 (一)的更多相关文章

  1. 面向对象(OPP)的三大特征之 继承

    OPP(面向对象编程的缩写)的三大优势: 1.继承 2.封装 3.多态 一.继承 1.继承:是两个对象之间的一种关系 a继承b 例如王思聪继承王健林 在OPP中继承是描述类与类之间的一种关系 2.继承 ...

  2. java面向对象编程(六)--四大特征之继承

    本文将介绍继承.方法重载和方法覆盖.其中方法重载和方法覆盖是在讲多态时必须要清楚的一个知识点. 一.继承 1.继承的概念 继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变 ...

  3. 【java基础】面向对象的三大基本特征之-------继承

    面向对象的三大特征:封装,继承,多态 java通过extends关键字来实现继承,而且是单继承,一个子类只可以有一个直接父类,但是父类还可以有父类... java.long.Object是所有类的父类 ...

  4. 包(package)以及面向对象三个基本特征(继承)的介绍

    1.包(package) 包(package) 用于管理程序中的类,主要用于解决类的同名问题.包也可以看成一个目录. 包的作用 [1] 防止命名冲突. [2] 允许类组成一个单元(模块),便于管理和维 ...

  5. 面向对象的三大特性之二——继承(含super的使用)

    1.继承的语法:class 子类 extends 父类 例1: class Person { int age; String name; public void print1() { System.o ...

  6. Python 面向对象编程的一些特征 及 单例模式的实现, 父类方法的调用(python2/python3)

    一.面向对象编程几个特征(封装, 继承,多态) 1.封装:类里面封装函数和变量, 在将类进行实例化成实例对象时进行传参, 从而生成不同的实例对象,增加代码的复用. 2.继承:子类可以继承父类的方法和属 ...

  7. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  8. Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)

    Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装:            将一些东西封装到一个地方,你还可以取出来( ...

  9. Python面向对象初始(三大特征,多态,继承,封装)

    Python面向对象的初始 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的 ...

  10. Java——面向对象的特征二:继承性

    2.1面向对象的特征二:继承性 ①引入类继承最基本的作用是:代码重用. ②语法 [修饰符列表] class 子类名 extends 父类名{ 类体; } ③子类继承父类以后,父类中声明的属性.方法,子 ...

随机推荐

  1. win10 设置开机启动VMware虚拟机并打开指定镜像

    1.设置win10开机启动应用 把应用程序的‘快捷方式’放到“系统启动文件夹”里即可. 2.开机启动VMware虚拟机并打开指定镜像 a.右键VMware Workstation快捷方式,看属性 b. ...

  2. Proving Equivalences(缩点+有环图变强连通分量)【tarjian算法】

    Proving Equivalences 题目链接(点击) 参考博客(点击) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768 ...

  3. turtle绘制彩色螺旋线

    代码实现: #绘制彩色螺旋线 import turtle import time turtle.pensize(2) turtle.bgcolor("black") colors ...

  4. 这一次搞懂Spring代理创建及AOP链式调用过程

    文章目录 前言 正文 基本概念 代理对象的创建 小结 AOP链式调用 AOP扩展知识 一.自定义全局拦截器Interceptor 二.循环依赖三级缓存存在的必要性 三.如何在Bean创建之前提前创建代 ...

  5. position中的四种属性

    Position有四个属性值,分别是static .fixed. relative .absolute. 第一个属性值是static,这是position的默认属性,一般我们都不会用到它,所以也很少提 ...

  6. 动态调试 别人写的jar包

    在别人的jar应用程序里: 在VMoption选项中添加: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50064 或者 ...

  7. Linux文件目录和访问权限

    前言 本文知识点是曾经学习过程中收录整理的,方便学习使用,并非在下撰写. 一>Lniux目录结构 /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录.所有的东西都是从这里开始. ...

  8. JavaWeb的登陆与注销功能

    JavaWeb 登录与注销 大致流程 一般我们在Web应用中 登录页面一般是以 login.jsp的首页 大致流程如下: 当我们在前台写入用户名和密码之后,点击登录按钮 会将表单提交给一个LoginS ...

  9. 傻瓜式教学--win10 + frp + rdpwrap + 阿里云服务器 --实现win10 多用户同时远程登录内网机

    概述: 使用win10 专业版 + frp + RDPwrap + 阿里云服务器 的组合实现win10 多用户同时远程登录内网机.使用frp 做内网穿透,将内网机的指定端口暴露在外网,通过ip+por ...

  10. elasticsearch 之 深入探秘type底层数据结构

    1.理论知识 type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立.分词器.field的value,在底层的lucene中建立索引 ...