Topic: 新人求证继承基本问题一例,望高人指点 |
Print this page |
1.新人求证继承基本问题一例,望高人指点 | Copy to clipboard |
Posted by: gumuyang Posted on: 2007-01-31 09:40 class Father{ int x=0,y=0; Father(){ System.out.println("now is in Father's constructor"); } Father(int x,int y){ this.x = x; this.y = y; } public void print(){ System.out.println("x="+x+";y="+y); } } class Son extends Father{ Son(){ System.out.println("now is in Son's constructor"); } Son(int x,int y){ super(x,y); //this(); //调用自己的构造器 } public void print(){ super.print(); System.out.println("My name is son!"); } } public class Example4_13{ public static void main(String[] args){ //通过默认构造器创建实例 Son s = new Son(); s.print(); //通过其他构造器创建实例 Son f = new Son(10,20); f.print(); } } 结果显示如下: now is in Father's constructor now is in Son's constructor x=0;y=0 My name is son! x=10;y=20 My name is son! 我对程序运作的认识如下: 从public class Example4_13{这一行开始是主程序 令我困惑的主要有两个问题: 一、子类继承父类时,为什么要把父类的所有程序段都执行一遍,而不是在s.print()只执行*.print()里的程序?我知道这是规范,但我很想知道为什么会这样规范,如果有人能描述一遍规范,我会非常感激! 二、从结果看来,好像父类和子类的内容是交替实现的,为什么不是先把父类的所有结果都实现一遍并显示,然后再显示子类的结果呢? 我知道这里新人很多,我也是其中一个,免不了又要给高手添麻烦。之前我也在这里静静地看过很多帖子,也下载了thinking in java,但作为只有薄弱的c语言基础的新人,第一章就让我看得云山雾罩,真的好希望身边有个高手,能边看边问,那该多好啊,我知道这很奢侈,只是说说心里话而已。 |
2.Re:新人求证继承基本问题一例,望高人指点 [Re: gumuyang] | Copy to clipboard |
Posted by: 嚼花仔 Posted on: 2007-01-31 10:39 你的理解有错误,子类继承父类不用把父类所有的代码都执行一遍的,只是要调用父构造函数,至于你的这个程序为什么会出现这个问题,完全是你自己用super.print();这一行调用的结果,不能怪java |
3.Re:新人求证继承基本问题一例,望高人指点 [Re: gumuyang] | Copy to clipboard |
Posted by: cxp108 Posted on: 2007-01-31 13:50 当你覆写一个父类的一个函数时,编译器并没有强制要求你调用super.XXXX(),所以在子类的print()函数中你完全可以删掉它调用父类函数的代码:super.print() 。 这样也可以通过编译。删掉super.print()以后的print()函数就不会再与父类有任何关联了。 另外,不建议新手看Thinking in Java ,我觉得Core Java对新手来说比较合适.... |
4.Re:新人求证继承基本问题一例,望高人指点 [Re: gumuyang] | Copy to clipboard |
Posted by: kyowu Posted on: 2007-01-31 14:29 那个叫做方法覆盖把,也叫重载,不一定要求你把父类的执行一遍啊,看你需要了 |
5.Re:新人求证继承基本问题一例,望高人指点 [Re: gumuyang] | Copy to clipboard |
Posted by: 嚼花仔 Posted on: 2007-01-31 14:54 重载和覆盖是不一样的吧?楼上的,请教了! class a{ void aa(int i){} void aa(int i,int ){} } class b extends a{ void aa(int j){} } |
6.Re:新人求证继承基本问题一例,望高人指点 [Re: 嚼花仔] | Copy to clipboard |
Posted by: shinegmd Posted on: 2007-01-31 17:24 兄弟,帮个忙,这个困了我很久的问题,请您在百忙中给予帮助! 用JBUILDER2006+SQL2000作一个简单密码验证的例子。所用控件jLabel,jTextField,jPasswordField,jButton.密码存放在sql2000里面,怎么样才能实现它? 谢谢!! shinegmd@126.com |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |