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