java - Java 重写的方法可见性范围
问题描述
以下程序如何正确?
abstract class Calculate
{
abstract int multiply(int a, int b);
}
public class Main
{
public static void main(String[] args)
{
int result = new Calculate()
{
@Override
int multiply(int a, int b)
{
return a*b;
}
}.multiply(12,32);
System.out.println("result = "+result);
}
}
我们在这里更改覆盖方法的范围。它不再是公共的,它应该是默认范围。是否允许覆盖方法的范围更改?
解决方案
您正在当前代码中创建一个匿名子类,但您非常接近拥有一个功能接口。让我们把它改成这样,比如
@FunctionalInterface
interface Calculate {
int multiply(int a, int b);
}
现在您有了一个抽象方法,并且可以使用花哨的 lambda。像,
public static void main(String[] args) {
Calculate calc = (a, b) -> a * b;
int result = calc.multiply(12, 32);
System.out.println("result = " + result);
}
请注意,这与您的原始示例完全相同,只是在 Java 8 中添加了语法糖。
推荐阅读
- google-bigquery - 如何在bigquery中获取主键和外键
- flutter - Flutter 路由后保存页面内容
- esp32 - 是否有支持 WiFi 的 esp32 模拟器?
- javascript - onclick 事件后,Javascript 代码弹出窗口不会保持活动状态
- javascript - javascript计算器上的退格按钮不起作用
- python - 无法安装 virtualenv (python) (windows)
- php - HTML 按钮未选择正确的表单值
- django - 正在运行的 Django 2 调度程序
- python - 为什么我在使用 pip WARNING: Ignoring invalid distribution -ip 时会得到这个?
- ruby-on-rails - 无法在 Ubuntu 20.04 上为 Ruby 版本 2.5.3 安装 json 版本 1.8.2 gem