黑马程序员技术交流社区
标题:
可不可以跨类重载?
[打印本页]
作者:
乔青山
时间:
2014-2-23 16:47
标题:
可不可以跨类重载?
本帖最后由 乔青山 于 2014-2-23 17:30 编辑
package cn.dream.oop.test.staticoverrideoverload;
public class Test1{
public void a(int a){
System.out.println(a);
}
public static void d(int a,int d){
System.out.println(a+d);
}
public static void main(String[] args){
Test1 t1 = new Test1();
t1.a(2);
Test2.a(1,2);
Test2.d(3);
Test2.d(1, 3);
}
}
class Test2 extends Test1{
public static void a(int a,int b){
System.out.println(1);
}
public static void d(int a){
System.out.println(2);
}
}
结果为:
2
1
2
4
这不算重载么?还是说只是形式上类似于重载,实际上是两个不同的方法?
作者:
欢欢
时间:
2014-2-23 16:52
可以的,只要有继承关系就可以。
作者:
李金中
时间:
2014-2-23 17:09
算是吧。 毕竟父类的函数,子类都有,也算是同一个作用域了。。。
作者:
张继鲁
时间:
2014-2-23 17:09
不可以,重载只可以在一个类才算,如果是先继承父类,然后再重载应该就可以的
作者:
徐青松
时间:
2014-2-23 17:45
理论上重载只在一个类中出现,重写则是必须是两个类中(子类重写父类方法)。你提的这个问题我验证了一下才发觉原来重载可以子父类中出现,因为子类继承了父类,也就继承了父类的方法。而子类中d方法虽然写只写了一个参数的方法,但是他从父类继承过来的方法也是存在的。我也不确定这个能不能叫重载,但是他的确体现了重载的主要特点!
作者:
KeepCoding
时间:
2014-2-23 18:24
必须算啊。
public void a(int a){
System.out.println(a);
}
public static void d(int a,int d){
System.out.println(a+d);
}
父类中的方法是public的,这两个方法在子类中存在,把父类中这两方法原封不动拷贝到子类中去就方便理解了,事实上就是这样的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2