30_面向对象_访问权限
Java中权限修饰符
* public、private、protected和默认
*
Scala中的权限修饰符
* 默认、private、private[包名]、protected
* 说明
* 默认
* scala中的默认的访问权限为public,但是scala中没有public关键字
* 权限说明 公共属性、公共类,不受权限控制
* private
* 修饰类
* 只能被同包(包含递归子包)访问
* 修饰成员
* 只能在类的内部和伴生对象中使用
* private[包名]
* 修饰类
* 只能被同包(包含递归子包)访问 + 被指定的(父类)包内
* 修饰成员
* 只能在类的内部和伴生对象中使用 + 被指定的(父类)包内
* 注意事项
* private 修饰后 只能向下访问,如果需要向上访问,需要指定private[父类包名]
* 同级包内的private类是无法访问的
* 示例 com.dxm.apackage 、com.dxm.bpackage
* apackage、bpackage 内的私有类无法互相访问
* protected
* 修饰成员
* 只能在同类(伴生对象)、子类中访问
* java中的protected,同类子类 + 同包类中可访问
*
* */
package com.dawang.scala.面向对象 /** * @author gaocun * @create 2021-10-21 7:44 PM */ object 访问权限_04 { /* * Java中权限修饰符 * public、private、protected和默认 * * Scala中的权限修饰符 * 默认、private、private[包名]、protected * 说明 * 默认 * scala中的默认的访问权限为public,但是scala中没有public关键字 * 权限说明 公共属性、公共类,不受权限控制 * private * 修饰类 * 只能被同包(包含递归子包)访问 * 修饰成员 * 只能在类的内部和伴生对象中使用 * private[包名] * 修饰类 * 只能被同包(包含递归子包)访问 + 被指定的(父类)包内 * 修饰成员 * 只能在类的内部和伴生对象中使用 + 被指定的(父类)包内 * 注意事项 * private 修饰后 只能向下访问,如果需要向上访问,需要指定private[父类包名] * 同级包内的private类是无法访问的 * 示例 com.dxm.apackage 、com.dxm.bpackage * apackage、bpackage 内的私有类无法互相访问 * protected * 修饰成员 * 只能在同类(伴生对象)、子类中访问 * java中的protected,同类子类 + 同包类中可访问 * * */ } package Packtwo { package PackOne { // 公共类 class PublicClass { var name = "这是公共类" private var flag = "这是公共类的私有属性" private[PackOne] var flagPack = "这是公共类的私有[包]属性" } // 私有类 private class PrivateClass { var name = "这是私有类" } // 私有类 + 指定包名 private[Packtwo] class PrivatePackClass { var name = "这是private[包]私有类" } // 测试 protected 修饰成员 class ProtectedClassFu { protected var name = "这是ProtectedClassFu类" } class ProtectedClassZi extends ProtectedClassFu { def show = println( name) } // 测试对象 object test { def main(args: Array[String]): Unit = { println("同包内访问私有类 - ", new PrivateClass().name) println("同包内访问私有类 - ", new PrivatePackClass().name) //println("同包内公共类私有属性 - ",new PublicClass().flag) //Symbol flag is inaccessible from this place println("同包内公共类私有[包]属性 - ", new PublicClass().flagPack) //println("ProtectedClassFu-name:",new ProtectedClassFu().name) new ProtectedClassZi().show } } } import PackOne.{PrivateClass, PrivatePackClass} // 测试对象 object test { def main(args: Array[String]): Unit = { //println("不同包内访问私有类 - ", new PrivateClass().name) //Symbol PrivateClass is inaccessible from this place println("同包内访问私有类 - ", new PrivatePackClass().name) } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界