Scala语言扫盲第四篇:类与对象
来源:互联网 发布:怎样看出淘宝是包邮的 编辑:程序博客网 时间:2024/06/03 18:19
Scala语言是面向对象和函数式编程的结合体。面向对象重要的概念就是类(class)与对象(object),下面就来谈谈类与对象
类与对象:
咱们就直接看代码与相关注释吧
package com.frank.scala/** * 说明:面向对象实战 * 1,面向对象的特点:抽象、多态、封装、继承 * 2,抽象:就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来一般叫做类或者接口 * 3,多态:指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。 * 4,封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面或接口 * 5,继承:对象的一个新类可以从现有的类中派生,这个过程称为类继承 * 6,class与object的关系: * 6.1 class 是面向对象编程的抽象出来的, * 6.2 object是对象,这个对象属于全局的静态对象,这个类似于Java中的静态变量 * 6.3 同一个文件中同名的class与object的关系是:class是object的伴生类,而object则是class的伴生对象。 * main方法要定义在object中。在class 中可以直接调用object中的方法,调用的方式是:object名称.方法名。 * 也可以说object是class的静态内容,在class 没有进行实例化的时候直接可以去调用object中的内容 * 7,apply方法:在object中可以通过apply控制对象的生成,也是对象的工厂方法; * 在class中可以通过apply是类当做函数使用,而函数本质上是类的实例。 * 例如:val arr1 = Array.apply("java","scala","spark") 这个是直接调用apply * 但是也可以这样:val arr1 = Array("java","scala","spark") 这个是间接调用了apply方法 * Created by sunzhongwei on 2016/10/22. * 微信号:F451209123 * QQ:843055018 */class ObjectOrientedTest { def testPrint = print("这个是class的测试方法") def testA = ObjectOrientedTest.testObject def apply() = println("I am class ApplyTest")}object ObjectOrientedTest{ val ooName = "OO" def main(args: Array[String]): Unit = { val dog = new Dog("jack",30) dog.printName() dog.printWeight //此处实例继承了父类中的方法 val animal = new Animal("主构造",30) //此处直接调用了主构造器进行初始化 animal.printWeight val animal_b = new Animal("A",30,"femal") //此处调用了从构造器 animal_b.printGender val t = new ObjectOrientedTest() t.testA t.testPrint /** * 通过Apply的方式 */ val t2 = ObjectOrientedTest() t2.testPrint t2.testA t2() //此处直接调用class中的appy方法 } def testObject = println("这个是object的测试方法") def apply() = { println("I am object ApplyTest") new ObjectOrientedTest }}/** * 说明: * 1,我们将小鸟、狗、鸡等抽象出动物Animal这个类 * 2,Animal这个类访问权限默认是public的 * 3,Animal(name:String) 这个是Animal定义了全局的变量,这个所有类的主构造器。 * 4,构造器:在Scala中构造器有两种:一个主构造器,另外一种是从构造器。 * 在类名后面的(...)以及类主体中除了定义的方法以及this从构造器,其他都属于主构造器 * @param name */class Animal(name:String,weight:Int){ var gender : String = "male" //打印出名称 def printName() = println(name) //打印出体重 def printWeight = println("我是"+name+",我的体重是:"+weight+"KG") def printGender = println("我是"+name+",我的体重是:"+weight+"KG,我的性别是:"+gender) /** * 此处通过this定义了从构造器,从构造器最终要调用主构造器 * @param name * @param weight * @param gender */ def this(name:String,weight:Int,gender:String){ this(name,weight) //此处调用了主构造器 this.gender = gender }}/** * 继承:通过extends关键词来实现父类相关属性方法的继承 * @param name * @param weight */class Dog(name:String,weight:Int) extends Animal(name,weight){ /** * 通过使用关键词override来复写父类的printName方法 */ override def printName()=println("你好!我是一只小狗,我的名字叫:"+name) def printName(name:String) = println(name) def printName(name:String,age:Int) = println(name)}
从上面的代码中涉及到的内容如下:
- 面向对象的概念与特点
- 在Scala中class与object的关系:伴生类与伴生对象
- 类的继承、方法重载、方法复写(override)
- class中的主从构造器
- appy方法
反编译Animal的class文件
我来看一下Scala反编译的代码:
从代码中可以看出在类名后括号声明的变量默认是private final类型,另外在Animal类中定义的私有变量gender,通过这种方式定义的私有变量,编译时会自动生成
public String gender() { return this.gender; } public void gender_$eq(String x$1) { this.gender = x$1; }
这2个方法
0 0
- Scala语言扫盲第四篇:类与对象
- Scala语言扫盲第二篇:变量定义与控制结构
- Scala语言扫盲第三篇:集合操作
- Scala语言扫盲第一篇
- Scala类与对象
- scala-类与对象
- Scala学习整理[第四-六章 使用Scala运行类/对象]<Programming In Scala>
- scala简要:类与对象
- scala编程---类与对象
- scala学习-类与对象
- scala的类与对象
- Programming In Scala笔记-第四章、类和对象
- 第四章 类与对象
- 第四章(对象与类)
- 第四部分 类与对象
- 第四章 对象与类
- 类与对象第四题
- 第四讲:类与对象
- TP-LINK无线路由器WDS功能应用提升家中WIFI速度
- 业余04—VC++6.0Error spawning cl.exe路径错误解决办法
- 【数据结构学习2】线性表,顺序表定义中详细表述。
- c#中的关键字out是什么意思?ref是什么意思?它们有什么区别?
- 使用c3p0与DBCP连接池,造成的MySql 8小时问题解决方案
- Scala语言扫盲第四篇:类与对象
- JavaScript函数绑定
- Redis数据类型之String类型
- 二分查找
- Cocos2d-过渡篇(三) 触摸机制
- 爬取糗事百科文字段子,(2016年10月22日可用)
- 欢迎使用CSDN-markdown编辑器
- dfs找环
- 欢迎加入我们的iOS开发交流群