一个函数 重载 和 函数 覆盖 的问题(请教)。
问题1:
public class a{
public void fun1(int i){} //不是static函数
}
public class b extends a{
public static void fun1(int i){} //是static函数
}
这样到底算 重载 还是 覆盖呢?
谢谢指教!!~~~
问题2:
public class a{ //不是static class
public void fun1(int i){}
}
public static class b extends a{ //是static class
public void fun1(int i){}
}
请问这样 是 重载 还是 覆盖 呢?
ths。
问题点数:20、回复次数:17Top
1 楼shenpipi(皮皮)回复于 2005-08-16 16:07:03 得分 0
第一个,语法错误,你说是重载 还是 覆盖?
第二个,似乎只有内类才可以使用static修饰符吧?如果是内类的话,应该是覆盖.Top
2 楼skylovers(遥忘)回复于 2005-08-16 16:25:34 得分 0
public class A{
public void test(){}
public void test(int i){}
public void test(String a){}
}
这个叫重载.Top
3 楼yejsj(叶子)回复于 2005-08-16 16:30:17 得分 0
static class
你这样定义,可以运行通过、、、
应该会报错吧Top
4 楼bob_thb(绿果)回复于 2005-08-16 16:30:27 得分 0
你从哪里看的这两个问题?Top
5 楼bianfu_2008()回复于 2005-08-16 17:08:55 得分 0
回复:
第一个是书上的一个题目,怎么会是错误的呢。。
我也 知道 判断 重载 与 覆盖 都要看 返回值 和 形参的。。
可是在前面加个 static 声明为 静态 函数 就不知道怎么 判断了。。Top
6 楼Dan1980()回复于 2005-08-16 17:11:09 得分 20
第1个问题: 都不是, 而是编译错误! 因为static无法覆盖也无法重载非static方法.
第2个问题: 同上, 编译错误! static成员无法直接访问非static成员, 更不用说去继承它了.
忠告楼主: 任何与static有关的东西, 一般都与继承无关. 所以你的这两个问题没有什么讨论的必要了. 结贴吧, 哈哈Top
7 楼wangshenhai()回复于 2005-08-16 17:58:37 得分 0
顶一下Top
8 楼Xeric2003()回复于 2005-08-16 18:02:36 得分 0
同意 Dan1980(也该有一些作为了) 的讲法.Top
9 楼jiangshachina()回复于 2005-08-16 18:25:41 得分 0
说的好Top
10 楼mydeman(漫步者)回复于 2005-08-16 18:33:30 得分 0
http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=577
这是一篇关于重载和覆盖的文章,可以作为参考!Top
11 楼navy7148(飞尘)回复于 2005-08-16 18:41:45 得分 0
支持,都是错误的,不是变量还是方法,被定义为static就不能在改变了Top
12 楼mascotzhuang(基督山伯爵)回复于 2005-08-16 18:43:44 得分 0
重载(overload)、重写(overwrite)、覆盖(override)
后两者的概念是相同的。前者是同一个类中,由于参数列表不同而方法名字相同。而后二者是子类中出现与父类完全一样的方法,从而覆盖了父类的方法。
class overWriteSuper
{
public void sayHello()
{
System.out.println("I'm in super class.");
}
}
class overWriteSub extends overWriteSuper {
public void sayHello()
{
System.out.println("I'm in sub class.");
}
public void sayGoodBye()
{
System.out.println("Good-bye all.");
}
public void sayGoodBye(String str)
{
System.out.println("Good-bye "+str+".");
}
}
public class overTest
{
public static void main(String[] args) {
overWriteSuper mySuper = new overWriteSuper();
mySuper.sayHello();
overWriteSub mySub = new overWriteSub();
mySub.sayHello();
overWriteSuper mySubOverWrite = new overWriteSub();//即使类型是父类但是还是调用子类的方法
mySubOverWrite.sayHello();
}
}
显示结果:
I'm in super class.
I'm in sub class.
I'm in sub class.Top
13 楼Qingjian(青见)回复于 2005-08-16 21:32:09 得分 0
这个不是函数重载 我要好好看书了 但我个人觉得这个问题问得实在没有意思 没有什么意义Top
14 楼bianfu_2008()回复于 2005-08-16 22:05:26 得分 0
回复:
Dan1980(也该有一些作为了) 说的好。。
看来我这 才真正 搞懂原理,,谢谢啦。。
看来书上 说的 很狡猾啊 ,他直接问 是重载 还是 覆盖。。没想到还没到边呢。呵呵。。
Top
15 楼shenpipi(皮皮)回复于 2005-08-18 12:09:35 得分 0
不知道还能不能回,但Dan1980关于第二个问题的回答是错误的.Top
16 楼shenpipi(皮皮)回复于 2005-08-18 12:16:37 得分 0
一个static的内部class是可以覆盖超类中的方法的.不过static也只能用在内部类中.Top
17 楼Nowish(看我能忍耐多久)回复于 2006-04-24 13:52:40 得分 0
??Top




