• 【scala】类的属性


    1. 属性的声明方法

    1.1 在主构造器形参中声明

    在这里插入图片描述

    class Student (val name: String,var age: Int){
        println("Primary constructor and Auxiliary constructor!")
        def fun = name + " is " + age +" years old!"
    }
    
    • 1
    • 2
    • 3
    • 4

    Scala 类的主构造器函数的形参包括三种类型:未用任何修饰、var 修饰、val 修饰:

    • 未用任何修饰符修饰,这个参数就是一个局部变量,但当其被至少一个方法使用时,就变为属性,但该属性只能在类内访问!
    • var 修饰参数,作为类的成员属性使用,可以修改
    • val 修饰参数,作为类只读属性使用,不能修改

    1.2 在主构造器内部声明

    在主构造器内部使用val或者var声明的变量都是类的属性

    2. 属性的var与val

    1. scala中类的属性默认都是private类型的,但默认会生成public类型的getter()和setter(),即私有属性,公有方法。

    2. scala中没有public关键字,没有修饰符的属性用起来就像public一样,但是其底层是private实现的

    3. 在scala中,getter与setter并不是被命名为getXXX和setXXX,而是XXX()和XXX_eq()

    在Scala中:

    1. 如果一个属性被声明为var且没有任何修饰符, Scala会为该字段生成公有的getter和setter方法。

    2. 如果属性是val且没有任何修饰符, Scala生成一个私有的final字段和一个getter方法,但是没有setter。

    3. 在主构造器形参中,如果一个属性没有var或者val的修饰符, Scala不会生成getter和setter方法。

    object Demo{
    	def main(args:Array[String]): Unit={
    		val p = new Person("xxx")
    		println(p.name) //访问不到
    		p.name = "ddddd" //访问不到
    	}
    	
    	class Person(name:String){
    
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. var和val属性被private关键字修饰时,不会生成getter和setter方法。

    3. 访问权限修饰符

    private :私有权限,只在类的内部和伴生对象中可用。

    protected :受保护权限,Scala 中受保护权限比 Java 中更严格,同类、子类可以访问,同包无法访问

    在这里插入图片描述

    4. 作用域保护

    Scala中,访问修饰符可以通过使用限定词强调。格式为:

    private[x]protected[x]
    
    • 1

    这里的x指代某个所属的包、类或单例对象。如果写成private[x],读作"这个成员除了对[…]中的类或[…]中的或[this]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。

    这里对 private[this]进行说明

    class Student{  
      private var privateAge = 0
      def isYounger(other:Student)= privateAge < other.privateAge   
      //类的方法可以访问这个类的所有对象的私有字段(或私有属性)
      //所以isYounger这个方法可以访问Student这个类的other对象的私有属性privateAge
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    class Student{  
      private[this] var privateAge = 0
      def isYounger(other:Student)= privateAge < other.privateAge//报错
    }
    
    • 1
    • 2
    • 3
    • 4

    private[this]限定了这个类的方法只能访问自己对象的属性privateAge,不能访问其他对象(即使这个对象是根据这个类生成)的属性。

    即这个属性只能是当前对象私有,isYounger()不能访问别的对象的私有成员。

  • 相关阅读:
    Web3.0时代来了,看天翼云存储资源盘活系统如何赋能新基建(下)
    【实测】Python 和 C++ 下字符串查找的速度对比
    记一次移动端封装自定义时间选择控件
    C/C++ 11/14/17 有栈式协同程式的基础框架类库【关于】
    PhpStorm 2023年下载、安装教程和好用插件,保姆级教程
    人非圣贤孰能无过,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang错误处理机制EP11
    一起学习SQL中各种join以及它们的区别
    有什么docker容器可以监视本地请求的码
    中后台管理系统如何更优雅的支持移动端
    【Leetcode】【每日一题】【简单】2558. 从数量最多的堆取走礼物
  • 原文地址:https://blog.csdn.net/weixin_44441131/article/details/126037608