当前位置: 代码迷 >> J2SE >> 重载能发生在子类与父类吗?该怎么解决
  详细解决方案

重载能发生在子类与父类吗?该怎么解决

热度:195   发布时间:2016-04-24 01:39:03.0
重载能发生在子类与父类吗?
子类方法能重载从父类继承来的方法吗?

Java code
class father{    void x(){            }}class son extends father{    void x(int x){            }}


像上面这段程序,是否是子类重载了父类的方法?如果是的话,那怎么解释“重载只发生在同一个类内部”呢?

------解决方案--------------------
那样不是重载。。。。

------解决方案--------------------
重载之发生在一个类的内部,子类父类之间有方法重写一说
你那样也不算重写,就是子类新加了一个方法
------解决方案--------------------
可以,父类有的方法子类也有,所有完全可以重载


public class Son extends Father{
public void test(int i){
System.out.println("This is from Son class and the number is " +i);
}
public static void main(String args[]){
Son son = new Son();
son.test();
son.test(1);
}
}


class Father{
public void test(){
System.out.println("This is from Father class");
}
}


输出结果为

This is from Father class
This is from Son class and the number is 1
------解决方案--------------------
我觉得你那样写能表达出所谓“重载”的意思,但是按照重载概念(重载是在同一个类中多态性的表现),似乎不符合。
可以更深层的理解为,子类只是拥有了父类的这个方法(功能),而不是自己创建的功能
------解决方案--------------------
你那样不是重载,重载是发生在一个类中的,比如:
public Class Test{
public void test(){
}
public void test(int a){
}
public void test(int a,int b){
}
}
这样,具有相同的方法名,参数的类型不同,或者参数的个数不同,就是重载(但是不能根据函数的返回值确定是否重载)
而覆盖是发生在子类和父类中的:
public abstract Class Animal{
public abstract void cry();
}
public Class Cat extends Animal{
public void cry(){
System.out.println( "Cat is cry... ");
}
}
这样就实现了覆盖。。
------解决方案--------------------
在一个类里,方法名相同,参数不同是方法的重载
方法重写必须满足下列条件:
(1) 子类的方法的名称及参数必须和所覆盖的方法相同
(2) 子类的方法返回类型必须和所覆盖的方法相同
(3) 子类方法不能缩小所覆盖方法的访问权限
(4) 子类方法不能抛出比所覆盖方法更多的异常


  相关解决方案