scala面向对象编程
来源:互联网 发布:黄金趋势分析软件 编辑:程序博客网 时间:2024/06/05 16:02
scala面向对象编程
1.1类的定义
由关键字、标识符、变量、方法和注释等内容组成,类声明处定义类的名称和类的访问权限及与其他类的关系,类体主要定义类的变量和方法。
如:
在工程的src目录的com.dt.scala.oop中新建HelloOOP对象
package com.dt.scala.oopclass Student{private var privateAge=0val name="Scala"def age=privateAgedef isYounger(other:Student)=privateAge<other.privateAge}object HelloOOP{def main(args:Array[String]){val student =new Student //val Student =new Student ()println(student.name)}}
1.2带有getter和setter的属性
在scala中getter和setter方法类似于privateAge和privateAge_=的定义,(privateAge_=为高阶函数)
如在上例中类Student定义变量privateAge,并没有显示定义属性的getter和setter函数,而在scala的编译码中生成了名字为privateAge的getter方法,
名字为privateAge_的setter方法。
2主构造器、私有构造器、构造器重载
2.1主构造器
scala中每个类都会有主构造器,主构造器和类定义在一起。构造器有共有构造器和私有构造器,私有只能在类内被访问。
1)参数直接放在类名之后
2)参数加val或var时自动升级为字段,其值被初始化为构造器传入的参数
3)除定义方法外,会执行类定义中所有语句
package com.dt.scala.oopclass Teacher(val name:String,val age:Int){var gender:String=_//_为占位符,可设置为NULLprintln(gender)def this(val name:String,val age:Int,val gender:String){this(name,age)this.gender=gender}}object OOPInScala{def main(args:Array[String]){val t=new Teacher("Spark",5)println(":"+t.age)}}
2.2构造器重载
辅助构造器名字为this, 先调用主构造器或其他已经定义的辅助构造器,再调用自己的命令
package com.dt.scala.oopclass Teacher{var name=Stringprivate var age=27private[this] val gendr="male"def this(name:String){thisthis.name=name}def sayHello(){println(this.name+":"+this.age+":"+this.gender)}}object OOPInScala{def main(args:Array[String]){val p= new Teacherp.name="Spark"p.sayHello}}
3内部类与外部类
Scala中允许在语法结构中内嵌语法结构,在函数中定义函数,再类中定义类
package com.dt.scala.oopclass Outer(val name:String){class Inner(val name:String){def foo(b:Inner)=println("Outer"+outer.name+" Inner"+b.name)//b:inner改为b:Outer#Inner下面的调用类型不匹配的错误就能改掉。}}object OOPInScala{def amin(args:Array[String]){val outer1=new Outer("Spark")val outer2=new Outer("Hadoop")val inner1=new outer1.Inner("Scala")val inner2=new outer2.Inner("Java")inner1.foo(inner1);inner2.foo(inner2);//但在这种情况下inner1.foo(inner2)就会出错}}
4单例对象和伴生对象
scala中没有静态方法和静态字段,使用object对象表达静态的效果
伴生对象和类名同名的对象,既有实例方法又有静态方法,类和他的伴生对象可以相互访问私有属性,类和伴生对象需保存到同一源文件中
5继承
使用extends关键字进行继承,父类在此处被称为超类,在子类中重写字段或方法使用override关键字
6抽象
抽象类与C++中抽象类的性质相同,主要讲抽象字段和抽象方法,
使用abstract定义抽象字段,没有初始赋值,抽象方法性质类似,都存在于抽象类中,抽象类作为基类。方法由子类重写。
7trait特质
特质封装方法和字段的定义,java提共接口interface,scala提供trait特质,特质可拥有抽象和具体方法,类只能继承一个超类,但可以混入任意特质
package com.dt.scala.opptrait Logger{def log(msg:String){}}class concreateLogger extends Logger with Cloneable{def concreteLog{log("It's me")}trait TraitLogger extends Logger{override def log(msg:String){println("message:"+msg)}}object UseTrait extends App{val logger =new ConcreteLogger with TraitLoggerlogger.concreteLog}//特质App中定义main的入口
多重继承的顺序参考C++中的多类继承
包的定义package,包对象package object,
包的引用import
import Scala.{StringBuilder=>}//将StringBuilder隐藏
import Scala.{StringBuilder=>stringB}//为StringBuilder起个别名
import Scala._//Scala包中所有东西
- Scala 面向对象编程
- scala面向对象编程
- Scala面向对象编程
- Scala面向对象编程
- Scala面向对象编程之对象
- Scala编程指南:面向对象编程
- Scala-面向对象的函数编程
- Scala 的面向对象编程基础
- Scala 的面向对象编程实践(一)
- Scala 的面向对象编程实践(二)
- Scala 的面向对象编程实践(三)
- Scala学习之路----面向对象编程
- Scala基础—面向对象编程示例
- Scala学习—面向对象编程之类
- scala学习笔记:面向对象编程基础
- 第7节:scala面向对象编程
- Scala学习笔记(二)Scala面向对象编程
- Scala学习—面向对象编程之对象
- Go语言中的map和slice
- 多线程和并发编程
- jsp(1)
- 3.多线程
- scala学习笔记:Map型变量
- scala面向对象编程
- 欢迎使用CSDN-markdown编辑器
- 学习笔记——c++primer学习(二)_头文件引用
- MySQL 主主复制
- python 学习 疑惑
- 事务的四大特性
- 选择排序与快速排序
- 音乐推荐系统系列
- HBase源码分析之Simple权限验证