Scala笔记

文章详细介绍了Scala中的包机制,包括基本语法、命名规则、包语句和包对象,强调了包的作用和管理风格。接着,讨论了类和对象的定义,以及封装的概念,特别提到了Scala中类的声明和Java的区别。此外,还涵盖了导入和访问权限的管理。
摘要由CSDN通过智能技术生成

目录

第六章 面向对象

6.1 Scala 包

(1)基本语法

 (2)Scala包的三大作用(和Java一样)

6.1.1 包的命名

        (1)命名规则

            (2) 案例实操

          (3)命名规范

6.1.2 包说明(包语句)

        (1)说明

        (2)案例实操

6.1.3 包对象

        (1)定义

          (2) 说明

6.1.4 导包说明

(2)注意

6.2 类和对象

6.2.1定义类

(1)回顾:Java中的类

(1)基本语法

(2)案例实操

6.3封装

6.1.5访问权限


第六章 面向对象

Scala的面向对象思想和Java的面向对象思想和概念是一致的。

Scala中的语法与Java不同,补充了更多的功能。

6.1 Scala 包

(1)基本语法

        package 包名

 (2)Scala包的三大作用(和Java一样)

        (1)区分相同名字的类 

        (2)当类很多时,可以很好的管理类

        (3)控制访问范围

6.1.1 包的命名

        (1)命名规则

                只能包含数字,字母,下划线,小圆点,当时不能用数字开头,也不要使用关键字。

            (2) 案例实操

dome.class.execl //错误,因为class关键字
dome.12a         //错误,数字开头

          (3)命名规范

                一般是小写字母+小圆点

                com.公司名.项目名.业务模块名 

6.1.2 包说明(包语句)

        (1)说明

                Scala有两种包的管理风格,一种方式和Java的包管理风格相同,每个源文件一个包(包名和源文件所在路径不要求必须一致),包名用 " ." 进行分隔以表示包的层级关系,如果com.atguigu.scala。另一种风格,通过嵌套的风格表示层级关系,如下

package com{
    package atguigu{
        package scala{
        }
    }
}

第二种风格有以下特点:

        (1)一个源文件中可以声明多个package

        (2)子包中的类可以直接访问父包中的内容,而无需导包

        (2)案例实操

//用嵌套风格定义包
package com{

  import com.atguigu.scala.Inner

  //在外层包中定义单例对象
  object Outer{
          var out:String ="out"

    def main(args: Array[String]): Unit = {
       println(Inner.in)
    }
  }
  package atguigu{
    package scala{
      //内层包中定义单例对象
      object Inner{
        val in:String ="in"
        def main(args: Array[String]): Unit = {
          println(Outer.out)
          Outer.out="outer"
          println(Outer.out)
        }
      }
    }
  }
}
//在同一文件中定义多个包
package aaa{
  package bbb{

    import com.atguigu.scala.Inner

    object Test_packge{
      def main(args: Array[String]): Unit = {
        println(Inner.in)
      }
    }
  }
}

6.1.3 包对象

        在Scala中可以为每个包定义一个同名的包对象,定义在包对象中的成员,作为其对应包下所有class和object的共享变量,可以被直接访问。

        (1)定义

package object com{
    val shareValue ="share"
    def ShareMethod()={}
}

          (2) 说明

              (1)若使用Java的包管理风格,则包对象一般定义在其对应包下的package.scala文件中,包对象与包名保持一致

                                

        Scala 提供包对象作为在整个包中方便的共享使用的容器。

        包对象中可以定义任何内容,而不仅仅是变量和方法。 例如,包对象经常用于保存包级作用域的类型别名和隐式转换。 包对象甚至可以继承 Scala 的类和特质

        按照惯例,包对象的代码通常放在名为 package.scala 的源文件中。

        每个包都允许有一个包对象。 在包对象中的任何定义都被认为是包自身的成员。

6.1.4 导包说明

        (1)和Java一样,可以在顶部使用import导入,在这个文件中的所有类都可以使用。

        (2)局部导入:什么时候使用,什么时候导入,在其作用范围内都可以使用

        (3)通配符导入:import Java.util

           (4)   给类起名:import java.util.{ArrayList=>JL}

           (5)  导入相同包的多个类:import java.util{HashSet,ArrayList}

           (6)屏蔽类:import.java.util{ArrayList=>_,_}

            (7)导入包的绝对路径:new _root_java.util.HashMap

(2)注意

Scala中的默认导入分别是

import java.lang._

import scala._

import scala.Predef._

6.2 类和对象

类:可以看成一个模板

对象:表示具体的事物

6.2.1定义类

(1)回顾:Java中的类

                如果类是public的,则必须和文件名一致

                一般,一个.java有一个public类

注意:Scala中没有public,一个.Scala中可以写多个类。

(1)基本语法

        {修饰符}class 类名{

类体

}

说明:

(1)Scala语法中,类并不声明为public,所有这些类都具有公有可见性(即默认就是public)

(2)一个Scala源文件可以包含多个类


(2)案例实操

创建对象,查看属性的实验

object Test01_class {
  def main(args: Array[String]): Unit = {
//创建一个对象
    val student =new Student()
    //student.name
    //error,不能访问private属性
    println(student.sex)
    println(student.age)
    student.sex="ffaf"
    println(student.sex)
  }
}
//定义一个类
class Student{
  //定义属性
  private var name:String ="alice"
  @BeanProperty
  var age:Int = _
  var sex:String= _
}

6.3封装

        封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法),才能对数据进行操作,Java封装操作如下

        (1)将属性进行私有化

        (2)提供一个公共的get方法,用于对属性赋值

        (3)提供一个公共的get方法,用于获取属性的值

        Scala中的public属性,底层实际为pricate,并通过get方法(obj.field())和set方法(obj。field_=(value))对其进行操作。所以Scala并不推荐属性设为private,再为其设置public的get方法和set方法。但是由于很多Java框架都利用反射调用getXXX和setXXX方法,有时候为了和这些框架兼容,也会为Scala的属性设置getXXX和SetXXX方法(通过@BeanProperty注解实现)

6.1.5访问权限

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神明不诉人间苦604

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值