方法覆盖在子 class 和父 class 中可以有不同数量的参数?no.of 参数可以不同吗?

Method overriding can have different number of parameters in subclass and parent class ?Can the no.of parameters differ?

我们有父 class 和子 class 有共同的方法 testparent() 但参数不同

//父级Class

  public class Overriding {

    int a,b,c;

   //Parameters are different in number

    public void testParent(int i, int j) {

       System.out.println(a+b);
    }
}
//Child Class Extending Parent Class Method
 class ChildOverriding extends Overriding {
      int c;

   public void testParent(int i,int j,int k) {

        System.out.println(a+b+c);
   }
  //Main Is not getting executed????
   public static void main(String args[]) {
     Overriding obj = new ChildOverriding();
     obj.testParent(1,4,8);
     }
  }
}

您可以使用这两种方法,但是 ChildOverriding 中的方法不会覆盖 Overriding 中的方法。它们是两个独立的方法。

要解决编译问题,您必须声明 obj ChildOverriding

ChildOverriding obj = new ChilOverriding();

或者您还必须在 Overriding

中实现一个三参数方法

重写方法 sub class 应该具有与基础 class 方法相同的签名。 参数和 return 类型应该相同。

实际上,您的问题是您通过超类的引用对象从子类访问方法。

让我再解释一下。

Super obj = new Sub();

这一行将创建一个名为 obj 的引用变量(class Super)并将其存储在堆栈内存中,new Sub() 的实例以及所有实现细节将存储在堆中内存区域。因此,将存储在堆中的实例的内存地址链接到存储在堆栈内存中的引用变量。

obj.someMethod()

现在,当我们在引用变量 obj 上调用任何方法(如 someMethod)时,它会在 Super class 中搜索方法签名,但是当它调用 [=14= 的实现时] 它将从存储在堆内存区域的实例中调用它。

这就是不允许从 Super 映射到 Sub class(如 Sub obj = new Super();)的原因,因为 Sub class 可能具有更具体的方法签名,可以调用但实例存储在堆区域可能没有那个调用方法的实现。

所以你的程序报错只是因为它找不到你在 super 中调用的方法签名 class。

请记住 Java 将始终仅在引用对象类型中查找方法签名。

你的问题的答案是 Yes, we can have different number of parameters in subclass's method but then it won't titled as method overloading/overriding. 因为重载意味着你要添加新的行为,而覆盖意味着改变行为。

抱歉我的英语不好,如果我在某处有误请告诉我,因为我正在学习Java。

谢谢。 :)