class Base {
public void display(int n){
System.out.println(n);
}}
class Derived extends Base{
public void display(){ //Line-1
System.out.println("display overloaded");
}}
public class Tester {
public static void main(String[] args){
Derived ref = new Derived();
ref.display(10); //Line-2
}}
为什么这段代码可以工作?父类方法如何对子类可见和可用?第2行不应该抛出一个错误,说没有这样的方法或者所定义的方法不应该有任何参数。
3条答案
按热度按时间nwnhqdif1#
在java中,所有的方法和变量
public
以及protected
访问修饰符从父类继承到子类。由于输入参数为int的显示方法display(int n)
也是从父类继承的Base
至Derived
. 生成的方法也可用于基类。当您在
Derived
没有参数的类display()
,实际上是在使用方法重载概念(而不是重写)。所以在你的Derived
类,实际上有两个同名的方法(不同的参数)display()
以及display(int n)
.这就是为什么你没有得到这样的方法,或者定义的方法不应该有任何参数。
esbemjvw2#
这些是不同的方法,要重写方法,必须具有相同的方法签名
同时添加
@Override
表示您正在重写基方法请注意,您不能真正删除方法,只需重写它(或重载,如您的示例所示)
hec6srdp3#
派生的方法重写了它的超类中的方法,但是它没有接受任何参数,但是您给派生的子类提供了一个参数,这样它就可以找到接受参数的方法,并找到它,这就是为什么它没有给出错误的原因