广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Scala 学习之面向对象(3)
  • 710
分享到

Scala 学习之面向对象(3)

面向对象Scala 2023-01-31 04:01:37 710人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

==> 类        ---> 类的定义class Student{     // 定义属性     private var stuName:String = "Tom"     private vat stuAge:Int

==> 类

        ---> 类的定义

class Student{
    // 定义属性
    private var stuName:String = "Tom"
    private vat stuAge:Int = 18
    
    // 定义方法
    def getStuName():String = stuName
    def setStuName(newName:String) = {
        this.stuName = newName
    }
    
    
}


        ---> 伴生类和伴生对象    object 相当于 Java 中的 static

            ---- object 对象可以跟类名不一样,如果跟类名一样,这个对象就是该类的伴生对象,反之,这个类就是这个伴生对象的伴生类

        ---> set 和 get 方法  

            ---- Scala 中,会自动给 private 定义的属性生成get和set 方法,使用 val 可以使其只生成 get 方法,而不会生成set 方法

            ---- 在定义变量时使用 this 关键字,可以使其成为此类的私有属性,不会生成 get 和 set 方法,如:

 // 定义正常的属性,可自动生成get 和 set  方法
 private var aaa:String = "hello"
 
 // 定义只可自动生成 get 方法的属性
 private val aaa:String = "hello"
 
 // 使用this 关键字,使其定义的属性成为此类的私有属性,不允许外界访问
 private[this] var aaa:String = "hello"


        ---> 嵌套类(内部类)

            ---- 内部类中的参数可以当做类的参数传递

        ---> 类的构造器

            ---- 主构造器 和类的声明在一起,只能有一个主构造器

class Student(val stuName: String, val stuAge: Int){

}

object Student{
    def main(args: Array[String]): Unit = {
        var stu = new Student("Tom", 20)
        println(stu.stuName + "\t" + stu.stuAge)
    }
}


            ---- 辅助构造器  可以有多个辅助构造器,使用 this 关键字

class Student(val stuName:String, val stuAge:Int){
    // 定义一个辅助构造器
    def this(age:Int){
    // 调用主构造器
    this("No Name", age)
    }
}

object Student{  // 
    var stu = new Student(22)
    println(stu.stuName + "\t" + stu.stuAge)
}    // 输出结果为 NoName   22


        ---> Object 对象: 相当于 Java 中的 static 关键字

            ---- 单例模式: 一个类只有一个对象

// 生成信用卡的卡号
object CreditCard{
    // 定义变量: 保存信用卡的卡号
    // 该属性只属于该对象 
    private[this] var creditCardNumbe:Long = 0
    
    // 产生卡号
    def generateNewCCNumber():Long = {
        creditCardNumbe += 1
        creditCardNumber
    }
    
    // 测试程序
    def main(args:Array[String]): Unit = {
    // 得到新的卡号
        println(CreditCard.generateNewCCNumber)
        println(CreditCard.generateNewCCNumber)
        println(CreditCard.generateNewCCNumber)
        println(CreditCard.generateNewCCNumber)
    }
}


            ---- 应用程序对象: App   ----- 可以省略 main 方法

object testApp extends App {
    // 省略了 main 方法,可以直接将结果输出
    println("hello")
}

        ---> 类的 apply 方法

            ---- 作用: 创建对象时,省略 new 关键字,需要定义在类的伴生对象中

class Student(stuName:String){

}

object Student{
    // 定义 apply 方法,必须定义在类的伴生对象中
    def apply(stuName: String) = {
        // 调用主构造器
        new Student(stuName)
    }
    def main(args: Array[String]): Unit = {
        var stu = Student("Tom")
    }
}

==> 继承

        ---> 简单继承

// 测试
object DemoExtends{
  def main(args: Array[String]): Unit = {
    // 创建一个 Person 对象
    val p1:Person = new Person("Tom", 20)
    println(p1.sayHello())            // My name is Tom,age is 20

    // 创建一个子类
    val p2:Person = new Employee("Marry", 32, 1233)
    println(p2.sayHello())            // 子类中的 sayHello

    // 创建一个匿名子类
    val p3:Person = new Person("Jerry", 33){
      override def sayHello(): String = "匿名函数中的 sayHello 方法"
    }
    println(p3.sayHello())            // 匿名函数中的 sayHello 方法
  }
}
// 父类
class Person(val name:String, val age:Int){
  def sayHello():String = "My name is " + name + ",age is " + age
}

// 子类    如果需要子类的值覆盖父类的值,需要加上 override 参数
class Employee(override val name:String, override val age:Int, val salary:Int) extends Person(name, age){
  override def sayHello(): String = "子类中的 sayHello"
}

        ---> 继承抽象类和抽象字段

object TestExtendsDemo {
  def main(args: Array[String]): Unit = {
    var apple:Fruit = new Apple()
    var orange:Fruit = new Orange()

    println(apple.name())        // 结果为 apple
    println(orange.name())        // 结果为 orange

  }
}

abstract class Fruit{
  var id:Int
  def name():String
  
}

class Apple extends Fruit{
   // 实现抽象字段
   var id:Int = 1
  // 实现抽象方法
  def name():String = {
    "apple"
  }

}

// 可以通过构造方法对抽象字段进行处理
class Orange() extends Fruit{
  def name:String = {
    "orange"
  }

}

        ---> 特质trait: 有点像接口,也有点像抽象类    支持多重继承,可以定义抽象方和字段,也可以定义完整的方法和字段

object Demo1 {

  def main(args: Array[String]): Unit = {
    var com:Computer = new Computer(1)
    println(com.run())
    println(com.movedown())
  }

}

class Computer(var monitorid:Int) extends Monitor with Mouse with Keyboard {
  def run():String = {
    "running"
  }

  def moveup(): String = {
    "moveup"
  }

  override def movedown(): String = {
    "movedown"
  }

  override def press(): String = {
    "press"
  }

}

trait Monitor{
  var monitorid:Int
  def run():String

}

trait Mouse{
  def moveup():String
  def movedown():String
}

trait Keyboard{
  def press():String
}


==> 包的定义和使用

        ---> 包的定义:

// 定义格式一
package com.mytest
class Demo{}

// 定义格式二
package com.mytest{
    class Demo{}
}


        ---> 包的使用(引入):

import com.mytest.Demo        // 可以不写Demo 的全路径
import com.mytest._            // 引入mytest 包下所有的属性
import com.mytest.Demo._        // 引入 Demo 类中所有的属性


==> 包对象

package object MyPackageDemo{
    // 常量
    val a:Int = 1
    // 变量
    var a:String = "hello"
    // 方法
    def Demo():String = {
        "Demo"
    }
    // 类
    class Demo{
        
    }
    // 对象 object
    object Demo{
    
    }
    // trait(特质)
    trait Demo{
    
    }
}



--结束END--

本文标题: Scala 学习之面向对象(3)

本文链接: https://www.lsjlt.com/news/187940.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Scala 学习之面向对象(3)
    ==> 类        ---> 类的定义class Student{     // 定义属性     private var stuName:String = "Tom"     private vat stuAge:Int...
    99+
    2023-01-31
    面向对象 Scala
  • Python 3 学习笔记:面向对象编程
    概述 面向对象编程(Object Oriented Programming,即 OOP),是一种程序设计思想,比面向过程编程更加灵活,更易扩展。 Python 在设计的时候就是按照面向对象编程的思想设计的,像我们前面学过的各种数据类型,如字...
    99+
    2023-01-31
    面向对象 学习笔记 Python
  • Python - 面向对象学习
    本节内容: 面向对象编程介绍为什么要用面向对象进行开发?面向对象的特性:封装、继承、多态类、方法、  引子你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是...
    99+
    2023-01-31
    面向对象 Python
  • Python学习之面向函数转面向对象详解
    还记得前文函数章节的‘函数的定义与使用’章节么?今天我们就来针对 类 进行一个综合练习,利用所学的面向对象编程、类 的知识将我们之前做的面向函数编写的学生信息...
    99+
    2022-11-13
  • Python学习之面向对象编程详解
    目录什么是面向对象编程(类)类的关键字 - class类的定义与使用类的参数 - selfself 的解析与总结类的构造函数构造函数的创建方法关于对象的生命周期什么是面向对象编程(类...
    99+
    2022-11-13
  • python学习之面向对象【入门初级篇】
    前言 最近在学习Python的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下。 概述 python支持多种编程范式:面向过程、面向对象、面向切面(...
    99+
    2022-06-04
    面向对象 入门 python
  • Python学习 :面向对象 -- 三大
    面向对象的三大特性 一、封装 把数据、值、变量放入到对象中 构造方法 _init_方法 特殊作用: 在 obj = 类名() 执行时: 内部自动执行两个步骤: 1、创建对象 2、通过对象执行类中的一个特殊方法(_init_方法) ...
    99+
    2023-01-30
    三大 面向对象 Python
  • python学习32(面向对象_3)
    继承 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。即一个派生类(derived class)继承基类(bass class)字段和方法。继承也允许把一个派生...
    99+
    2023-01-31
    面向对象 python
  • js 面向对象学习笔记
    目录数据赋值拷贝值类型赋值--函数形参&实参引用类型赋值对象的动态性delete删除属性数据赋值拷贝 1、值得赋值是独立的 num1=12; num1=num2 将存储值赋值...
    99+
    2023-05-18
    js 面向对象
  • Java面向对象:抽象类的学习
    本文介绍了抽象类的基本语法概念,什么是抽象类. Java中抽象类的语法,抽象类的特性 抽象类的作用(抽象类和普通类的区别) 用抽象类实现多态… 抽象类的学习 一.什么是抽象类二.抽象类语...
    99+
    2023-09-11
    java 学习 jvm
  • Java学习笔记之面向对象编程精解
    目录包继承super 关键字finalprotected关键字组合多态抽象类接口面向对象编程(包、继承、组合、多态 、抽象类、接口) 包 包其实就是类的集合,其本质上其实就是一个文件...
    99+
    2022-11-12
  • 学习廖雪峰Python3教程之面向对象小
        面向对象编程(OOP)是程序设计的思想,OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概...
    99+
    2023-01-31
    面向对象 教程 廖雪峰
  • javascript面向对象3
    函数 创建函数: function f(x){…..}; var f = function(x){…}; 上面两种形式都可以创建名为f()的函数,不过后一种形式可以创建匿名函数。        函数定义时可以设置参数。如果传给函数的参数个数...
    99+
    2023-01-31
    面向对象 javascript
  • Java面向对象:接口的学习
    本文介绍了Java中接口的基本语法, 什么是接口, java中的接口 语法规则, 接口的使用,接口的特性,如何实现多个接口,接口间的继承,以及抽象类和接口的区别 Java接口的学习 一.接口的概念二.Java中的接口1.接口语...
    99+
    2023-08-17
    java 学习 android
  • Java Scala面向对象怎么使用
    今天小编给大家分享一下Java Scala面向对象怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Scala...
    99+
    2023-07-06
  • python学习之面向对象程序设计的一些
    将属于一类的对象放在一起:     如果一个函数操纵一个全局变量,那么两者最好都在类内作为特性和方法实现。    不要让对象过于亲密:     方法应该只关心自己实例的特性,让其他实例管理自己的状态。 简单就好:     让方法小巧起来,...
    99+
    2023-01-30
    程序设计 面向对象 python
  • #3 Python面向对象(二)
    前言 上一节主要记录面向对象编程的思想以及Python类的简单创建,这节继续深入类中变量的相关知识,Here we go! Python中类的各种变量 1.1 类变量 类变量定义:在类中,在函数体(方法)外的变量称为类变量。类变量在整个类...
    99+
    2023-01-30
    面向对象 Python
  • Python学习教程:面向对象学习实力讲解
    类的实现class Cat:"""猫科动物类"""tag='我是家猫 'def __init__ (self,name,age=0): #没有默认值必须要传,且写在...
    99+
    2023-06-02
  • php面向对象教程3
    5.如何实例化对象我们上面说过面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,既然我们类会声明了,下一步就是实例化对象了。当定义好类后,我们使用new 关键字来生成一个对象。$对象名称= new 类名称();<phpcla...
    99+
    2023-01-31
    面向对象 教程 php
  • python3学习之对象
    #过程编程----函数编程(代码复用高)--面向对象 #python 支持  函数式+面向对象 编程 # def mail(email,message): #     print("sendsend") #     return Tru...
    99+
    2023-01-31
    对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作