首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

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

2012-03-23 
重载能发生在子类与父类吗?子类方法能重载从父类继承来的方法吗?Java codeclass father{void x(){}}class

重载能发生在子类与父类吗?
子类方法能重载从父类继承来的方法吗?

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) 子类方法不能抛出比所覆盖方法更多的异常


热点排行