gpt4 book ai didi

java - 出现错误 "The inherited method in Abs.show() cannot hide the public abstract method in iface"

转载 作者:行者123 更新时间:2023-11-30 03:21:21 26 4
gpt4 key购买 nike

以下编写的代码出现错误“Abs.show() 中的继承方法无法隐藏 iface 中的公共(public)抽象方法”。

package com.xprodev;
abstract class Abs {
void show(){
System.out.println("in show");
}
abstract public void print();

}
interface iface {
void show();
void print();
}

public class BasicAbs extends Abs implements iface {
public static void main(String[] args){
BasicAbs a = new BasicAbs();
a.show();
a.print();
}

@Override
public void print() {
System.out.println("in print");

}
}

我可以通过将 Abs 中的显示公开来解决该错误。但我有几个问题

  1. 为什么语言支持这种用法?
  2. 如果允许的话可以实现什么目标?
  3. 在调用 a.print() 时,只会调用 print 的实现。调用 Abs 类或 iface 接口(interface)中的方法的实现是否有意义。我们能知道吗?

最佳答案

Why the language support for this usage?

事实并非如此 - 这就是你收到错误的原因

What can be achieved if this is allowed?

回想一下,BasicAbs 是一个Abs
如果您允许将package protected“自动转换”为public,以防与接口(interface)发生冲突,从而损坏封装,您基本上可以使用方法为您想要从基类(可能是其他人的类)公开的每个方法,这不是一个好主意。

on calling a.print() only implementation of print will be called . Is that make sense to call this implementation is of method in Abs class or iface interface. Can we know that?

    Method m = BasicAbs.class.getMethod("print");
System.out.println(m.getDeclaringClass());

将产生:

class BasicAbs

关于java - 出现错误 "The inherited method in Abs.show() cannot hide the public abstract method in iface",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31263853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com