我们有父类和子类有共同的方法testparent()
,但参数有差异
//父类
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);
}
}
}
答案 0 :(得分:1)
重写Means子类应具有相同的基类方法签名。 参数和返回类型应该相同。
答案 1 :(得分:0)
您可以使用这两种方法,但ChildOverriding
中的方法不会覆盖Overriding
中的方法。它们是两种独立的方法。
要修复编译问题,您必须声明obj
ChildOverriding
ChildOverriding obj = new ChilOverriding();
或者您还必须在Overriding
答案 2 :(得分:0)
实际上你的问题是你通过SuperClass的引用对象从SubClass访问一个方法。
让我再解释一下。
Super obj = new Sub();
该行将创建一个名为obj
的引用变量(类Super),并将其存储在堆栈内存和new Sub()
实例中,所有实现细节都将存储在堆内存区域中。因此,存储在堆中的实例的内存地址链接到存储在堆栈内存中的引用变量。
obj.someMethod()
现在,当我们在引用变量someMethod
上调用任何方法(如obj
)时,它将在Super类中搜索方法签名,但是当它调用someMethod
的实现时,它将从实例存储在堆内存区域中。
这背后的原因是不允许从Super到Sub类的映射(如Sub obj = new Super();
)因为Sub类可能有更具体的方法签名可以被调用但是存储在堆区域中的实例可能没有实现那个叫做方法。
所以你的程序只是因为它找不到你在超类中调用的方法签名而给出错误。
请记住,Java总是只在参考对象的类型中寻找方法签名。
对您的问题的回答是Yes, we can have different number of parameters in subclass's method but then it won't titled as method overloading/overriding.
,因为重载意味着您正在添加新行为,而重写则意味着更改行为。
抱歉我的英语不好,如果我错了,请告诉我,因为我正在学习Java。
感谢。 :)