11.Scala属性和访问权限

Scala属性和访问权限

在类中声明的变量就是属性

基本语法

[修饰符] var|val 属性名称 [:类型] = 属性值

在scala中,当使用var声明了一个属性时,scala在编译时会自动为该属性构造类似set和get方法(名字不符合javabean规范)。 一下是反编译的源码

public class User
{
  private String name = "zhangsan";

  public String name() { return this.name; } 
  public void name_$eq(String x$1) { this.name = x$1; }

  public boolean login()
  {
    return true;
  }
}

在scala中,当使用val声明了一个属性时,scala在编译时会自动为该属性构造类似get方法,并且该方法用final修饰 一下为反编译

public class User1 extends Parent12
{
  private final int age = 20;

  public int age() { return this.age; }

}

在scala中,属性可以设默认值,通过_符号,不过val不能设置默认值,val修饰的属性必须显示的初始化,

Bean属性

前面提到Scala生成的set和get方法不符合Bean规范,此时使用@BeanPropetry

package com.atguigu.chapter06

import scala.beans.BeanProperty

object Scala06_BeanPropetry {

    def main(args: Array[String]): Unit = {

        val user: User1 = new User1

        user.setName("zhangsan")
        println(user.getName)
    }
}

class User1 {
    @BeanProperty
    var name: String = _
}

访问权限

Scala和java一致,采用public, private,protected 三种访问权限,在不声明访问权限的情况下,Scala使用public作为默认权限,不过没有public这个关键字~

private 为私有属性,只有在类的内部和伴生对象中可用。字类不可用

parivate[包名],指定一个包,在该包中的类也可以使用,子类不可用

protectd 只有本类和子类可以使用。

object Scala04_class {
    def main(args: Array[String]): Unit = {
        // TODO 面向对象 - class
        val user = new User0()

        // 实际调用的是方法
        // 当给属性赋值时相当于调用底层的set方法
        user.name = "sad"
        // 当获取对象属性值时相当于调用属性的get方法

        user.setId(1)
        user.getId
    }
}

// scala中声明类不需要使用public,而且可以多次声明
// Scala中的类也可以继承负类
// 声明属性


class User1 {
}

class  User2 extends User1 {

}

class User0{
    var name : String = null

    @BeanProperty
    var id : Int = _
    // 如果想要属性可以默认初始化
    // 声明属性时会给当前类声明私有的属性,并声明属性的类似set和get的方法
    // 如果给属性声明 为私有访问权限,那么编译时就是set,get方法就是私有方法
    // 当属性采用val声明,那么底层编译时会声明为final,而且不会生成set方法,就无法修改
    // 加入注解后同时会生成符合JavaBean规范的set和get方法
    // setter : 属性名()
    // getter : 属性名_$eq(参数)
    // 标准的javaBean规范中要求属性必须要有set,get方法,因此set和get方法必须要以set和get开头
    // scala为了解决javabean通用的问题,提供了属性的注解。


    var age : Int = _
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值