A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔青山 中级黑马   /  2014-2-23 16:47  /  1377 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 乔青山 于 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

这不算重载么?还是说只是形式上类似于重载,实际上是两个不同的方法?

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

5 个回复

倒序浏览
可以的,只要有继承关系就可以。
回复 使用道具 举报
算是吧。  毕竟父类的函数,子类都有,也算是同一个作用域了。。。
回复 使用道具 举报
不可以,重载只可以在一个类才算,如果是先继承父类,然后再重载应该就可以的
回复 使用道具 举报
理论上重载只在一个类中出现,重写则是必须是两个类中(子类重写父类方法)。你提的这个问题我验证了一下才发觉原来重载可以子父类中出现,因为子类继承了父类,也就继承了父类的方法。而子类中d方法虽然写只写了一个参数的方法,但是他从父类继承过来的方法也是存在的。我也不确定这个能不能叫重载,但是他的确体现了重载的主要特点!
回复 使用道具 举报
必须算啊。
    public void a(int a){
                System.out.println(a);
        }
        public static void d(int a,int d){
                System.out.println(a+d);
        }
父类中的方法是public的,这两个方法在子类中存在,把父类中这两方法原封不动拷贝到子类中去就方便理解了,事实上就是这样的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马