欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Scala基础知识

Scala基础知识

2025/5/5 21:58:22 来源:https://blog.csdn.net/2402_87382229/article/details/146949320  浏览:    关键词:Scala基础知识

函数
求和函数

一个函数,该函数可以求1到N的和,N可以由用户指定。通过递归调用自身实现累加,举例说明了当N为1、2、5时的计算过程。最后,函数返回从1加到N的结果。
水仙花数判断
孙水仙花数的概念,即一个N位数,其各位数字的N次幂之和等于它本身。

1. 步骤分解
   确定位数:计算数字的位数 n。  
   分解各位数字:将数字拆分为各个位上的数字a1 a2 ..., an。  
   计算次方和:对每个数字计算 a 并求和。  
   比较结果:若和等于原数字,则为水仙花数。  

包管理
scholar语言中的包管理,包括包的命名规则和管理风格。
包的三大作用:区分相同名字的类、管理类、控制访问范围。
详包的命名规则和两种包管理风格:嵌套风格和小圆点分隔风格。

案例如下

demo.class.exec1  //错误,因为 class 关键字

demo.12a  //错误,数字开头
包对象
包对象的概念,即为每一个包定义一个同名的包对象,包对象中的成员可以被包下的所有类和对象直接访问。另一种风格,通过嵌套的风格表示层级关系,如下

package com{ package zpark{
package scala{}
}

第二种风格有以下特点:

  1. 一个源文件中可以声明多个 package
  2. 子包中的类可以直接访问父包中的内容,而无需导包
package com {
import com.zpark.Inner //父包访问子包需要导包object Outer {val out: String = "out"def main(args: Array[String]): Unit = {println(Inner.in)}
}
package zpark { object Inner {val in: String = "in"def main(args: Array[String]): Unit = {println(Outer.out) //子包访问父包无需导包}}}
}
package other {
}
}

导包说明
scholar语言中的导包方式,包括全局导入、局部导入和通配符导入。通配符导入使用小横杠表示,而不是Java中的星号。

1.和 Java 一样,可以在顶部使用 import 导入,在这个文件中的所有类都可以使用。

2.局部导入:什么时候使用,什么时候导入。在其作用范围内都可以使用

3.通配符导入:import java.util._

4.给类起名:import java.util.{ArrayList=>JL}

5.导入相同包的多个类:import java.util.{HashSet, ArrayList}

6.屏蔽类:import java.util.{ArrayList =>_,_}

7.导入包的绝对路径:new _root_.java.util.HashMap

package java{ package util{class HashMap {}}
}

类和对象
scholar语言中类的定义语法,没有public关键字,但所有类默认具有公有可见性。
scholar语言中一个源文件可以包含多个类。
属性
属性是类的一个组成部分
属性具有自动生成功能,即自动生成set和get方法。
访问权限
对比Java和scholar语言中的访问权限设置

  1. Scala 中属性和方法的默认访问权限为 public,但 Scala 中无 public 关键字。
  2. private 为私有权限,只在类的内部和伴生对象中可用。
  3. protected 为受保护权限,Scala 中受保护权限比 Java 中更严格,同类、子类可以访问,同包无法访问。
  4. private[包名]增加包访问权限,包名下的其他类也可以使用

在 Java 中,访问权限分为:public,private,protected 和默认。在 Scala 中,你可以通过类似的修饰符达到同样的效果。但是使用上有区别。


方法
类中方法的定义和使用,方法可以重写和重载。
强调了方法与函数的区别,方法可以在类内声明并重写。

案例如下

class Person {def sum(n1:Int, n2:Int) : Int = { n1 + n2}
}object Person {def main(args: Array[String]): Unit = { val person = new Person() println(person.sum(10, 20))}
}


创建对象
scholar语言中创建对象的语法结构,包括VAL和VAR的区别。
对象的属性值可以改变,但对象引用不能改变。
构造器
构造器的概念和作用,构造器用于初始化对象的成员变量。

和 Java 一样,Scala 构造对象也需要调用构造方法,并且可以有任意多个构造方法。

Scala 类的构造器包括:主构造器和辅助构造器

说明:

  1. 辅助构造器,函数的名称 this,可以有多个,编译器通过参数的个数及类型来区分。
  2. 辅助构造方法不能直接构建对象,必须直接或者间接调用主构造方法。
  3. 构造器调用其他另外的构造器,要求被调用构造器必须提前声明。

构造方法介绍:

构造方法的作用,类似于对象的“出生说明书”。
可以有多个构造方法,包括主构造器和辅助构造器。
构造方法的语法:

类的基本语法结构,包括类名、形态列表、花括号内的主构造器类体。
使用this关键字定义辅助构造器,可以通过参数的不同来区分多个辅助构造器。

/(1)如果主构造器无参数,小括号可省略
//class Person ()
{ class Person {var name: String = _ var age: Int = _def this(age: Int) {this() this.age = ageprintln("辅助构造器")}def this(age: Int, name: String) { this(age)this.name = name
}println("主构造器")
}object Person {
def main(args: Array[String]): Unit = { val person2 = new Person(18)}
}


辅助构造器的特性:

辅助构造器的函数名称为this。可以有多个辅助构造器,编译器通过参数个数和类型区分。不同参数类型的辅助构造器的区分方式。

构造方法:

构造方法的基本概念:

构造方法的作用,类似于对象的“出生说明书”,在构造对象之前预先设定一些内容。
讲解了构造方法包括主构造器和辅助构造器。
构造方法的语法和使用:

构造方法的基本语法,包括类名、形态列表、主构造器和辅助构造器的定义。
强调了辅助构造器的命名规则是this,并且可以通过参数的个数和类型来区分不同的辅助构造器。
辅助构造器的调用规则:

辅助构造器不能直接构造对象,必须直接或间接调用主构造器。
辅助构造器调用其他构造器时,被调用的构造器必须提前声明。

构造器与面向对象编程
构造器

构造器是对象的出生说明书,在构造对象之前预先设定好属性。
构造器包括主构造器和辅助构造器,可以有多个辅助构造器。
构造器的语法

主构造器在类体中定义,辅助构造器使用 this 关键字。
辅助构造器的个数没有限制,通过参数个数和类型区分。
构造器的调用规则

辅助构造器必须直接或间接调用主构造器。
调用其他构造器时,必须在当前构造器之前声明。
构造器参数的修饰

无修饰:局部变量。
var 修饰:类的成员变量,可修改。
val 修饰:常量,只读属性。
面向对象的三大属性
封装

封装数据和操作数据的方式,隐藏内部接口,只暴露必要的接口。
通过私有化属性和提供公共的 get 和 set 方法实现。
继承

子类继承父类的属性和方法,可以扩展或修改。
继承的调用顺序是先父类构造器,再子类构造器。
多态

同一个方法在不同的子类中有不同的实现。
动态绑定,确保代码的多样性和功能的多样性。
代码示例与实操


构造器示例

无参数构造器、主构造器和辅助构造器的代码示例。
解释了构造器参数修饰的不同效果。
封装示例

通过私有化属性和 get、set 方法实现封装。 scholar 类中不推荐将属性设置为 public。
继承与多态示例

展示了子类继承父类的代码示例。
通过 teacher 类继承 person 类,展示了多态的实现。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词