java:为什么父类方法对派生类可见?

6tdlim6h  于 2021-07-11  发布在  Java
关注(0)|答案(3)|浏览(199)
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行不应该抛出一个错误,说没有这样的方法或者所定义的方法不应该有任何参数。

nwnhqdif

nwnhqdif1#

在java中,所有的方法和变量 public 以及 protected 访问修饰符从父类继承到子类。由于输入参数为int的显示方法 display(int n) 也是从父类继承的 BaseDerived . 生成的方法也可用于基类。
当您在 Derived 没有参数的类 display() ,实际上是在使用方法重载概念(而不是重写)。所以在你的 Derived 类,实际上有两个同名的方法(不同的参数) display() 以及 display(int n) .
这就是为什么你没有得到这样的方法,或者定义的方法不应该有任何参数。

esbemjvw

esbemjvw2#

这些是不同的方法,要重写方法,必须具有相同的方法签名

@Override
public void display(int n){ 
  System.out.println("display overloaded"); 
}

同时添加 @Override 表示您正在重写基方法
请注意,您不能真正删除方法,只需重写它(或重载,如您的示例所示)

hec6srdp

hec6srdp3#

派生的方法重写了它的超类中的方法,但是它没有接受任何参数,但是您给派生的子类提供了一个参数,这样它就可以找到接受参数的方法,并找到它,这就是为什么它没有给出错误的原因

相关问题