首页 > 其他分享 >每日总结

每日总结

时间:2024-02-15 21:22:08浏览次数:23  
标签:总结 成员 Scala 每日 private 访问 Inner class

Scala 访问修饰符

Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。

如果没有指定访问修饰符,默认情况下,Scala 对象的访问级别都是 public。

Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。


私有(Private)成员

用 private 关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的规则还适用内部类。

实例

class Outer{
    class Inner{
        private def f(){
            println("f")
        }
        class InnerMost{
            f() // 正确
        }
    }
    (new Inner).f() //错误
}

(new Inner).f( ) 访问不合法是因为 f 在 Inner 中被声明为 private,而访问不在类 Inner 之内。

但在 InnerMost 里访问 f 就没有问题的,因为这个访问包含在 Inner 类之内。

Java 中允许这两种访问,因为它允许外部类访问内部类的私有成员。


保护(Protected)成员

在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。因为它只允许保护成员在定义了该成员的的类的子类中被访问。而在java中,用 protected关键字修饰的成员,除了定义了该成员的类的子类可以访问,同一个包里的其他类也可以进行访问。

实例

package p {
    class Super {
        protected def f() {println("f")}
    }
    class Sub extends Super {
        f()
    }
    class Other {
        (new Super).f() //错误
    }
}

上例中,Sub 类对 f 的访问没有问题,因为 f 在 Super 中被声明为 protected,而 Sub 是 Super 的子类。相反,Other 对 f 的访问不被允许,因为 other 没有继承自 Super。而后者在 java 里同样被认可,因为 Other 与 Sub 在同一包里。


公共(Public)成员

Scala 中,如果没有指定任何的修饰符,则默认为 public。这样的成员在任何地方都可以被访问。

实例

class Outer {
   class Inner {
      def f() { println("f") }
      class InnerMost {
         f() // 正确
      }
   }
   (new Inner).f() // 正确因为 f() 是 public
}

作用域保护

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

private[x] 

或 

protected[x]

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

这种技巧在横跨了若干包的大型项目中非常有用,它允许你定义一些在你项目的若干子包中可见但对于项目外部的客户却始终不可见的东西。

实例

package bobsrockets{
    package navigation{
        private[bobsrockets] class Navigator{
         protected[navigation] def useStarChart(){}
         class LegOfJourney{
             private[Navigator] val distance = 100
             }
            private[this] var speed = 200
            }
        }
        package launch{
        import navigation._
        object Vehicle{
        private[launch] val guide = new Navigator
        }
    }
}

上述例子中,类 Navigator 被标记为 private[bobsrockets] 就是说这个类对包含在 bobsrockets 包里的所有的类和对象可见。

比如说,从 Vehicle 对象里对 Navigator 的访问是被允许的,因为对象 Vehicle 包含在包 launch 中,而 launch 包在 bobsrockets 中,相反,所有在包 bobsrockets 之外的代码都不能访问类 Navigator。

 

标签:总结,成员,Scala,每日,private,访问,Inner,class
From: https://www.cnblogs.com/baijingyun/p/18016624

相关文章

  • 2024.2.15模拟赛总结
    这次发挥很好啊,rank1,300pts,比rank2高了70ptsT1发现操作二的影响是不可避免的,就尽可能让操作1没影响,每次就删连续的相同的数字,然后统计一下即可T2感觉思路很自然,首先只需要保留近k次操作如果有一个横的和一个竖的覆盖两个点,就可以直接走曼哈顿距离如果两点之间被横或......
  • 每日导数61
    一题多解,换主元、隐零点已知函数\(f(x)=\lnx-x+a-1\)(1)若\(f(x)\leq0\),求\(a\)取值范围(2)当\(a\in(0,1]\)时,证明:\(f(x)\leq\dfrac{(x-1)e^x-xe^a}{e^a}\)解(1)因\(f(1)=a-2\),则必须有\(a\leq2\)现说明,\(a>2\)是所求范围\(f^{\prime}(x)=\dfrac{1}{x}-1\),则不难得......
  • 运算符总结
    publicclass基本运算符{publicstaticvoidmain(String[]args){//算术运算符//二元运算符inta=10;intb=20;intc=25;intd=25;System.out.println(a+b);System.out.println(a-b);......
  • 模拟赛总结
    2024.2.6【寒假集训】20240206测试T1珠子T2数组这个题,我没考虑到的是要保留全部的\(x,y\)操作信息,以及上一次\(A\)操作的时间等等。代码(参考lcy):#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,m;intt1[500001],t2[500001];intlst[5......
  • C#实现异步编程的常用方式总结
    随着现代软件对性能和响应速度的要求越来越高,异步编程已经成为许多开发者必须掌握的技能。C#提供了多种实现异步编程的方式,每种方式都有其特定的适用场景和优缺点。本文将详细介绍C#中实现异步编程的常用方式,帮助读者更好地理解并选择合适的异步编程方法。一、Task和TaskC#......
  • Codeforces Round 925 (Div. 3) 赛后总结
    此次总结借鉴了Register_int,0x3ea,幻想家协会会长的题解。感谢大佬。RecoveringaSmallString题目大意:将字母a-z编号为1-26,给出一个整数,此整数为三个字母之和,求改字符串的最小字典序。分析可以暴力循环,或者分情况讨论.我们只要尽力保持越前面的字母越小越好。#include<i......
  • 2023年度总结
    今年的年度总结比往年来的都要晚一些,1、2月份事情很多,当然拖延症也占了一部分,索性把今年的年度总结战线拉的长一些,说说最近的故事。 2023年全年大事件真正意义旅游晋升成功考公失败生病家人和我-开始奇怪养生之旅参加婚礼-去了河北的很多地方看房子 往年的详细解说......
  • 【运维测试】移动测试自动化知识总结第1篇:移动端测试介绍(代码笔记已分享)
    本系列文章md笔记(已分享)主要讨论移动测试相关知识。主要知识点包括:移动测试分类及android环境搭建,adb常用命令,appium环境搭建及使用,pytest框架学习,PO模式,数据驱动,Allure报告,Jenkins持续集成。掌握操作app的基本api,掌握元素定位及获取元素信息的api,掌握事件操作api,掌握app模拟手势......
  • 每日导数59
    换主元,常用放缩与有界放缩已知函数\(f(x)=a^2e^x-3ax+2\sinx-1\)(1)若\(f(0)\)是函数\(f(x)\)的极值,求实数\(a\)的值(2)证明,当\(a\geq1\)时,\(f(x)\geq0\)解(1)\(f^{\prime}(x)=a^2e^x-3a+2\cosx,f^{\prime}(0)=a^2-3a+2=0\)得\(a=1\)或\(a=2\)(2)考虑\(\varphi(a)=a^2......
  • AtCoder Beginner Contest 340 考试总结
    前言可惜的是我是VP的,却打得相对较好(服了。得分明细:ABCDEFGTotal√√√√√√×2625改题明细:ABCDEFG√√√√√√×第一次打AT,发挥还可以。A.ArithmeticProgressionProblem打印一个包含第一项\(A\),最后一项\(B\)......