scala中protected的访问权限

本文通过实验探讨了Scala中protected修饰符的访问权限。实验表明,在Scala中,同一个包内的非子类无法访问其他类的protected成员,进一步验证了跨包访问的限制更为严格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在java中同一个包中,其它类可以访问本类中的protected成员,其它包中本类的子类可以访问本类的protected成员,但其它类则不能访问本类的protected成员。那么scala中是不是也是这样的权限呢? 我们做个实验:

joe@joe-Aspire-Z3730:/media/sdb4/download/scala/testdemo/protecteddemo$ gedit protectedtest.scala

package p{
class Super{
	protected def f(){println(s"protected \n test")}
}
class Sub extends Super{
f()
}

class Other{
(new Super()).f()
}
}

然后编译代码,出现如下提示:

joe@joe-Aspire-Z3730:/media/sdb4/download/scala/testdemo/protecteddemo$ scalac protectedtest.scala 
protectedtest.scala:10: error: method f in class Super cannot be accessed in p.Super
 Access to protected method f not permitted because
 enclosing class Other in package p is not a subclass of
 class Super in package p where target is defined
(new Super()).f()
              ^
one error found

我们将(new Super()).f()这行代码换成可以正常执行的语句,如:println("other .....")再进行编译则成功。 这个实验说明在scala中,同一个包中,不是子类的话,则不能访问另一个类中的protected成员,那么可以推出,不是同一个包中的类,更不可能访问本包中的某个类的protected成员。

转载于:https://my.oschina.net/u/2963604/blog/1802041

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值