Scala学习 2 Scala面向对象
来源:互联网 发布:博罗网络问政 编辑:程序博客网 时间:2024/06/05 15:13
object Scala_study3 { def main(args: Array[String]): Unit = { /* * 2.1 Scala面对对象详解 * * 2.1.1 Scala中class和object初介紹 * scala中class的定义与java类似,区别是在Scala中,类名不是必须和文件名相同,且一个文件中可以定义多个class. * Scala中的class不存在静态成员,Java中的静态成员由Scala中的object对象替代, * 当object对象名与class名相同时称object为class的[伴生对象] * */ //2-1 Scala类的定义实战 class HiScala{ private val name:String = "zhangsan" def sayName(): Unit ={ println(name) } def getName = name } val hiScala = new HiScala hiScala.sayName() println(hiScala.getName) //2-2 object定义实战 object Person{ println("构造函数调用一次") val age = 10 def getAge = age } Person.getAge Person.getAge //2-3 继承 abstract class Animal{ def eat = { println("Eat food !!!") } def run } class Cat extends Animal{ override def eat: Unit = { println("Eat mouse!!!") } override def run: Unit = { println("cat is running...") } } class Dog extends Animal{ override def run: Unit = { println("dog is running") } } val c = new Cat c.eat c.run val d = new Dog d.eat d.run } /* * Eat mouse!!! cat is running... Eat food !!! dog is running * */ //2-4 子类不能重写父类中被final修饰的方法和属性 /* * 2.1.2 主构造器和辅助构造器 * */ //2-5 Scala默认构造器在类上 class Person1{ }//默认无参构造器 class Person2(name:String){ println(name) }//默认带一个字符串参数的构造器 //2-6 构造器重载(辅助构造器) class Person3(name:String){ println(name) def this(name:String,age:Int) { this(name) println(name + ":" + age) } def this(name:String,age:Int,sex:String) { this(name,age) println(name + ":" + age + ":" + sex) } } //2-7 构造器重载(多参数默认构造器) class Student1(name:String,age:Int,sex:String){ println(name + ":" + age + ":" + sex) } val s = new Student1("chenjie",23,"male") /* * 2.1.3 类的字段和方法彻底精通 * */ class Person4{ var name : String = "zhangsan" var age = 30 val sex = "famale" def seyHi = println("Hi!!!") def increase(age:Int):Int = this.age + age } val p = new Person4 println(p.name) println(p.sex) p.name = "lisi" //2-9 复写setter class Person5{ private var myName = "Flink" def name = this.myName def name_=(newName:String){//等号两边不能有空格 myName = newName println("hi:" + myName) } } //2-10 自定义setter class Person6{ private var myName = "Flink" def name = this.myName def update(newName:String): Unit ={ myName = newName } } //2-11 private[this]实战,用此修饰的字段或方法只能被当前对象访问,当前对象的其他实例无法访问. /* * 2.1.4 抽象类 接口的实战详解 * */ abstract class Person7(name:String){ println(this.name) private var age = 20 val sex : String = "male" //抽象类中的字段不能用abstract修饰 } //Scala的特质相当于Java中的接口,不过特质中可以有实现的方法 //在Scala中实现特质被成为混入,混入的第一个特质用关键字extends,混入更多的用with trait Person8{ val name : String val age = 30 def eat(str:String): Unit ={ println(str) } } trait Worker{ val age = 25 def work: Unit ={ println("Working....") } } class Student2 extends Worker with Person8{ val name : String = "zhangsan" override val age: Int = 15 //两个特质中的相同字段发生冲突时必须重写该字段 } /* * 2.1.5 Scala Option类详解 * Scala中的Option[T]可以是一些[T]或者None对象,它代表一个缺失值 * 例如hashMap的get方法,可能找到则返回值,可能找不到则返回null,这就是一个Option * */ /* * 2.1.6 objetc的提取器 * objetc中提供了apply方法,作用是在创建对象时不直接用new,而是直接用对象加参数,这时调用类伴生对象的apply方法 * */ var arr1 = Array(1,2,3) arr1 = Array.apply(1,2,3) //2-18 提取器 object ExtractorTest{ def apply(user:String,domain:String)={ user + "@" + domain } def unapply(str: String): Option[(String,String)] = { val parts = str.split("@") if(parts.length == 2){ Some(parts(0),parts(1)) } else { None } } }}
阅读全文
0 0
- Scala学习 2 Scala面向对象
- Scala面向对象学习
- scala学习三:scala面向对象
- scala 学习笔记 面向对象
- 7.scala面向对象2
- Scala学习笔记(二)Scala面向对象编程
- Scala学习笔记之面向对象
- Scala学习笔记之面向对象
- Scala学习之路----面向对象编程
- Scala学习—面向对象编程之类
- scala学习笔记:面向对象编程基础
- Scala的面向对象
- Scala面向对象
- Scala面向对象
- Scala面向对象
- scala面向对象
- Scala 面向对象编程
- 5.Scala面向对象
- Oracle---备份(backup)
- Js中<%=%>是做什么的
- Maven——maven配置与Myeclipse创建maven项目
- JZOJ5394. 【NOIP2017提高A组模拟10.5】Ping 树上差分 树状数组
- BeanFactory not initialized or already closed
- Scala学习 2 Scala面向对象
- 【hdu1712】分组背包
- springmvc学习笔记(6)-springmvc整合mybatis(IDEA中通过maven构建)
- 算法小碎片(二)
- JavaScript基础知识
- Anaconda 5.0.0 JupyterLab 0.27.0 中配置多Python环境支持
- Python3爬虫:爬取大众点评网北京所有酒店评分信息
- 基于神经网络的DQN方法
- C++ 指针