JAVA高手进来帮帮忙!!!!

一个苦逼的码农小胖子 2010-03-14 07:52:09
哪位大哥大姐能给我说说关于类的重载的基本思想!!!如何重载!!最好再加个例子讲解下!!!谢谢了!!!!!
...全文
51 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zj836262528 2010-03-14
  • 打赏
  • 举报
回复
class Egg2{
protected class Yolk
{
public Yolk()
{
System.out.println("Egg2.Yolk()");
}
public void f()
{
System.out.println("Egg2.Yolk.f()");
}
}

private Yolk y=new Yolk();

public Egg2()
{
System.out.println("NewEgg2()");
}

public void insertYolk(Yolk yy)
{
y=yy;
}

public void g()
{
y.f();
}
}

public class BigEgg2 extends Egg2
{
public class Yolk extends Egg2.Yolk
{
public Yolk()
{
System.out.println("BigEgg2.Yolk()");
}

public void f()
{
System.out.println("BigEgg2.Yolk.f()");
}
}

public BigEgg2()
{
insertYolk(new Yolk());
}

public static void main(String[] args)
{
Egg2 e2=new BigEgg2();
e2.g();
}
}
zj836262528 2010-03-14
  • 打赏
  • 举报
回复
如果你创建了一个内部类,然后继承其外围类并重新定义此内部类时,会发生什么呢?也就是说,内部类可以被重载吗?这看起来似乎是个很有用的点子,但是“重载”内部类就好像它是外围类的一个方法,其实并不起什么作用:

classEgg{
privateYolky;

protectedclassYolk{
publicYolk(){
System.out.println(\"Egg.Yolk()\");
}
}

publicEgg(){
System.out.println(\"NewEgg()\");
y=newYolk();
}
}

publicclassBigEggextendsEgg{
publicclassYolk{
publicYolk(){
System.out.println(\"BigEgg.Yolk()\");
}
}

publicstaticvoidmain(String[]args){
newBigEgg();
}
}


输出结果为:
NewEgg()
Egg.Yolk()

缺省的构造器是编译器自动生成的,这里是调用基类的缺省构造器。你可能认为既然创建了BigEgg的对象,那么所使用的应该是被“重载”过的Yolk,但你可以从输出中看到实际情况并不是这样的。
这个例子说明,当你继承了某个外围类的时候,内部类并没有发生什么特别神奇的变化。这两个内部类是完全独立的两个实体,各自在自己的命名空间内。当然,明确地继承某个内部类也是可以的:

classEgg2{
protectedclassYolk{
publicYolk(){
System.out.println(\"Egg2.Yolk()\"); [Page]
}

publicvoidf(){
System.out.println(\"Egg2.Yolk.f()\");
}
}

privateYolky=newYolk();

publicEgg2(){
System.out.println(\"NewEgg2()\");
}

publicvoidinsertYolk(Yolkyy){
y=yy;
}

publicvoidg(){
y.f();
}
}

publicclassBigEgg2extendsEgg2{
publicclassYolkextendsEgg2.Yolk{
publicYolk(){
System.out.println(\"BigEgg2.Yolk()\");
}

publicvoidf(){
System.out.println(\"BigEgg2.Yolk.f()\");
}
}

publicBigEgg2(){
insertYolk(newYolk());
} [Page]

publicstaticvoidmain(String[]args){
Egg2e2=newBigEgg2();
e2.g();
}
}

输出结果为:
Egg2.Yolk()
NewEgg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()

现在BigEgg2.Yolk通过extendsEgg2.Yolk明确地继承了此内部类,并且重载了其中的方法。Egg2的insertYolk()方法使得BigEgg2将它自己的Yolk对象向上转型,然后传递给引用y。所以当g()调用y.f()时,重载后的新版的f()被执行。第二次调用Egg2.Yolk()是BigEgg2.Yolk的构造器调用了其基类的构造器。可以看到在调用g()的时候,新版的f()被调用了。

50,549

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧