我有一个类,它有一个方法,默认情况下访问说明符是public.现在,我想在子类中扩展此类,并且我想覆盖此方法以使访问说明符为"private".编译此代码时,我收到编译错误:
"尝试分配较弱的访问权限".
有人可以向我解释在子类中分配较弱的权限有什么问题吗?
以下是导致编译错误的代码:
class Superclass
{
void foo()
{
System.out.println("Superclass.foo");
}
}
class Subclass extends Superclass
{
private void foo()
{
System.out.println("Subclass.foo");
}
}
Run Code Online (Sandbox Code Playgroud) 这些代码中这些下划线用法之间有什么区别和术语名称:(参见handler(resource)部分)
1.
def readFile[T](f: File)(handler: FileInputStream => Byte => T): T = {
val resource = new java.io.FileInputStream(f)
try {
val hh = handler(resource)_
hh(2)
} finally {
resource.close()
}
}
val bs = new Array[Byte](4)
readFile(new File("scala.txt")) {
input => b: Byte => println("Read: " + (input.read(bs) + b))
}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误:
Error:(55, 29) _ must follow method; cannot follow Byte => T
val hh = handler(resource)_
^
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
2.
def readFile[T](f: File)(handler: FileInputStream => Byte => T): …Run Code Online (Sandbox Code Playgroud) 在Scala中,有四种成员修改,即def,val,lazy val,var.关于覆盖的规则看似复杂且不一致,例如,def可以被覆盖val,而不是相反.很高兴看到所有这些规则的完整列表.
我是斯卡拉的新手.我一直在研究java.使用=运算符在scala中定义函数对我来说没有意义.
def abc(a:Int,b:Int):Int =
a+b
Run Code Online (Sandbox Code Playgroud)
谁能解释一下?在上面的代码中,为什么我必须使用=运算符.