黑马程序员技术交流社区

标题: 可不可以跨类重载? [打印本页]

作者: 乔青山    时间: 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