微博内网站怎么做的,wordpress 发布插件,石家庄建站模板,管理软件erp1、面向对象的基本概念
把数据及对数据的操作方法放在一起#xff0c;作为一个相互依存的整体——对象#xff0c;面向
对象的三大特征#xff1a; 封装 继承 多态
2、类的定义
简单类和无参方法 class Counter{private var value 0;def increment() { value1};def…1、面向对象的基本概念
把数据及对数据的操作方法放在一起作为一个相互依存的整体——对象面向
对象的三大特征 封装 继承 多态
2、类的定义
简单类和无参方法 class Counter{private var value 0;def increment() { value1};def current() value;}//注意class 前面没有public 关键字修饰
如果要开发main方法需要将main方法定义在该类的伴生对象中即object对
象中后续做详细的讨论 class Counter{private var value 0;def increment() { value1};def current() value;}//Scala 中类的定义class Student1{//定义属性private var stuName:String Tomprivate var stuAge:Int 20//成员方法def getStuName():String stuNamedef setStuName(newName:String) this.stuNamenewNamedef getStuAge():Int stuAgedef setStuAge(newAge:Int) this.stuAgenewAge}object student {def main(args: Array[String]): Unit {//测试student1var s1 new Student1//第一次输出println(s1.getStuName() \t s1.getStuAge())//调用set方法s1.setStuName(Mary)s1.setStuAge(25)//第二次输出println(s1.getStuName() \t s1.getStuAge())//第三次输出// println(s1.stuName \t s1.stuAge)}} 3、属性的getter和setter方法
当定义属性是private时候scala会自动为其生成对应的get和set方法如下所
示
private var stuName:String Tom
get方法: stuName ---- s2.stuName() 由于stuName是方法的名字所
以可以加上一个括号
set方法: stuName_ ---- stuName_ 是方法的名字
定义属性private var money:Int 1000 希望money只有get方法没有
set方法
办法将其定义为常量private val money:Int 1000
private[this]的用法该属性只属于该对象私有就不会生成对应的set和
get方法。如果这样就不能直接调用例如s1.stuName --- 错误 //属性的get 和 set 方法/*1.当定义属性是private 时候scala会自动为其生成对应的get 和set方法private var stuName:String Tom(1) get 方法stuName ---- s2.stuName()(2) set 方法stuName_2.定义属性private var money:Int 1000 希望money只有get方法没有set方法方法将其定义为常量private val money:Int 10003.private[this]3.private[this]的方法该属性只属于该对象私有就不会生成对应的set和get方法*/class Student2 {//定义属性private var stuName:String Tom//private [this] var stuAge:Int 20private var stuAge:Int 20private val money:Int 1000}//测试object Student2 {def main(args: Array[String]): Unit {var s2 new Student2println(s2.stuName \t s2.stuAge)println(s2.stuName \t s2.stuAge \t s2.money)//修改money的值 --》 error//s2.money 2000}}
4、内部类嵌套类
我们可以在一个类的内部在定义一个类如下我们在Student类中再定义了
一个Course类用于保存学生选修的课程 import scala.collection.mutable.ArrayBuffer//嵌套类内部类class Student3 {//定义一个内部类记录学生选修的课程信息class Course(val courseName:String,val credit:Int){//定义其他方法}private var stuName:String Tomprivate var stuAge:Int 20//定义一个ArrayBuffer记录学生选修的所有课程private var courseList new ArrayBuffer[Course]()//定义方法往学生信息中添加新的课程def addNameCourse(cname:String,credit:Int): Unit {//创建新的课程var c new Course(cname,credit)//将课程加入listcourseList c}}//测试object Student3 {def main(args: Array[String]): Unit {//创建学生对象var s3 new Student3//给该学生添加新的课程s3.addNameCourse(Chinese,2)s3.addNameCourse(English,3)s3.addNameCourse(Math,4)//输出println(s3.stuName \t s3.stuAge)println(*********选修课程***********)for (s -s3.courseList) println(s.courseName \t s.credit)}}
5、类的构造器
类的构造器分为主构造器、辅助构造器
主构造器和类的声明结合在一起只能有一个主构造器
Student4(val stuName:String,val stuAge:Int)
(1) 定义类的主构造器两个参数
(2) 声明了两个属性stuName和stuAge 和对应的get和set方法 辅助构造器可以有多个辅助构造器通过关键字this来实现 /*类的构造器1.主构造器和类的声明结合在一起只能有一个主构造器Student4(val stuName:String,var stuAge:Int)(1)定义类的主构造器两个参数(2)声明了两个属性stuName和stuAge 和 对应的get 和 set 方法2.辅助构造器可以有多个辅助构造器通过关键字this 来实现*/class Student4 (val stuName:String,val stuAge:Int) {//定义辅助构造器def this(age:Int){//调用主构造器this(no name,age)}}object Student4 {def main(args: Array[String]): Unit {//创建Student4的一个对象var s4 new Student4(Tom,20)println(s4.stuName \t s4.stuAge)//创建一个新的Student4 的对象var s42 new Student4(25)println(s42.stuName \t s42.stuAge)}} 6、Scala中的Object对象
Scala没有静态的修饰符但Object对象下的成员都是静态的 若有同名的
class这其作为它的伴生类。在Object中一般可以为伴生类做一些初始化等操
作。下面是Java中的静态块的例子。在这个例子中我们对JDBC进行了初始化
而Scala中的Object就相当于Java中静态块。
在 Scala 中是没有 static 这个东西的但是它也为我们提供了单例模式的
实现方法那就是使用关键字 object。
Scala 中使用单例模式时除了定义的类之外还要定义一个同名的 object 对
象它和类的区别是object对象不能带参数。
当单例对象与某个类共享同一个名称时他被称作是这个类的伴生对象
companion object。你必须在同一个源文件里定义类和它的伴生对象。类被称为
是这个单例对象的伴生类companion class。类和它的伴生对象可以互相访问
其私有成员。 Object对象的应用
单例对象 //利用object 对象实现单例模式object CreditCard {//变量保存信用卡号这里比较好的做法是定义成private[this],即该属性只属于该对象,这个方法由于定义在object中所以是静态的即单例的private[this] var creditCardNumber:Long 0//产生新的卡号def generateNewCCNumber():Long {creditCardNumber 1creditCardNumber}//测试程序def main(args: Array[String]): Unit {//产生新的卡号println(CreditCard.generateNewCCNumber())println(CreditCard.generateNewCCNumber())println(CreditCard.generateNewCCNumber())println(CreditCard.generateNewCCNumber())}} 使用应用程序对象可以省略main方法需要从父类App继承。 //使用应用程序对象可以省略main方法object HelloWorld extends App{/*def main(args: Array[String]): Unit {//这里的main就可以不写。相当于下面的代码是在main方法中执行的。}*/println(Hello World)///如何取得命令行的参数if(args.length 0) {println(args(0))}else{println(no arguents)}}