2 回答
TA贡献1921条经验 获得超9个赞
从JLS:
形式 super.Identifier 指的是当前对象名为 Identifier 的字段,但将当前对象视为当前类的超类的实例。
[...]
使用关键字 super的形式仅在类的实例方法、实例初始值设定项或构造函数中,或在类的实例变量的初始值设定项中有效。如果它们出现在其他任何地方,则会发生编译时错误。
您正在super从类类型调用,因此编译错误。
正如许多人在评论中建议的那样,您应该只传递A::Func该funcOp方法。
请注意,您也无法super从您的Func方法调用,因为它是一个static方法,因此它不绑定到类实例。
编辑以下 OP 的评论
您可以使用super实例方法中的关键字(因此,如果您删除静态),它看起来像这样:
class B extends A {
int Func(int y) {
// e.g:
if (y > 10) {
return super.Func(y); // call Func from the parent class
}
return y + 1;
}
}
TA贡献1906条经验 获得超3个赞
super和this关键字是引用某个对象的引用变量。换句话说,它属于类的实例。
如果您正在寻找替代方法而不是A::Func,您可以这样做
class B extends A {
static int Func(int y) {
// return (int) (Math.random() * y);
return y + 1;
}
public int getSuperFunc(int y)
{
//call A class Func(int y)
return super.Func(y);
}
}
并在测试类的主要方法中
System.out.print("Enter a number: ");
java.util.Scanner scanner = new java.util.Scanner(System.in);
//int result = funcOp(B::Func, scanner.nextInt()); // <-This works.
B b=new B();
int result1 = funcOp(b::getSuperFunc, scanner.nextInt()); // <-This works.
scanner.close();
System.out.println(result1);
输出
Enter a number: 1
1
添加回答
举报