喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
     
标题: 问一个问题!  
 
全职杀手王 (全职杀手王)
注册会员
Rank: 2
一般会员



UID 64617
精华 0
积分 63
帖子 59
金钱 63 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-6-8
状态 离线
[广告]: Enom域名自助付费 自助注册 自助PUSH 主流域名COM等一律57.99元年
问一个问题!

在JAVA最新版本中super变量在子类中是不是不隐含调用了,象下面这个程序,如果把super.Animal();注释掉,那么只输出Fish中的内容,可是教材上说super是隐含调用的。
还有,如果把下面的fh.Fish();注释掉,教材上说编译后可以输出东西,可是在我的机器上编译后再运行却什么也没输出!
class Animal
{
        int height,weight;
        void Animal()
        {
                System.out.println("Animal construct");
        }
}

class Fish extends Animal
{
        int height;
        void Fish()
        {
//                super.Animal();
                System.out.println("Fish construct");
}

class Integration
{
        public static void main(String args[])
        {
                Fish fh=new Fish();
//                fh.Fish();
        }
}
2006-2-12 09:53 PM#1
查看资料  发短消息  QQ  顶部
 
全职杀手王 (全职杀手王)
注册会员
Rank: 2
一般会员



UID 64617
精华 0
积分 63
帖子 59
金钱 63 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-6-8
状态 离线
[广告]: 代充Paypal帐号美元
现在这里好冷清啊!去年的时候这里还很热闹来!
2006-2-13 08:40 AM#2
查看资料  发短消息  QQ  顶部
 
stanleyqian
中级会员
Rank: 3Rank: 3
中级会员


UID 29826
精华 0
积分 298
帖子 627
金钱 298 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2004-7-4
来自 Melbourne, Australia.
状态 离线
[推荐阅读] 我要换工作
这几天我忙于考试。如果没有别人回答你的问题的话,我会在明天晚上给你答复。



Stanley Qian at Melboure, Australia
2006-2-13 09:35 AM#3
查看资料  访问主页  Blog  发短消息  Yahoo!  顶部
 
全职杀手王 (全职杀手王)
注册会员
Rank: 2
一般会员



UID 64617
精华 0
积分 63
帖子 59
金钱 63 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-6-8
状态 离线
[推荐阅读] 使用mysql的视图能提高性能吗?
谢谢你了!
2006-2-13 04:13 PM#4
查看资料  发短消息  QQ  顶部
 
yonnie (yonnie)
注册会员
Rank: 2
中级会员



UID 16614
精华 0
积分 126
帖子 126
金钱 126 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2002-9-20
状态 离线
[推荐阅读] 请教下关于文件上传的问题。
去掉构造函数前的void就行了
2006-2-14 04:01 PM#5
查看资料  发短消息  顶部
 
stanleyqian
中级会员
Rank: 3Rank: 3
中级会员


UID 29826
精华 0
积分 298
帖子 627
金钱 298 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2004-7-4
来自 Melbourne, Australia.
状态 离线
[推荐阅读] 习作练习。。。检查不出问题(值为什么传不过来)
补充说明:
1) 虽然一个文件中可以写多个Class,但只能是其中一个含有main();
程序编译好后,程序就只执行main()中的内容。
所以,注释掉// fh.Fish()后,导致main()就执行了一行:
Fish fh=new Fish(); //创建一个Fish对象,并分配内存给它。
之后,main()就结束了,也就是整个程序结束了。

2) 如果不注释掉 fh.Fish(),那么,Fish对象fh,就调用了Fish类的一个方法Fish(),如下:
void Fish()
    {
        // super.Animal();
        System.out.println("Fish construct");
    }
再进一步,如果没有注释掉super.Animal(),那此时这里的Fish()方法中又调用了它的父类的方法Animal();

3)如上回复所说的,去掉构造函数前的void。
以上(1)和(2),我是根据你没有构造函数来说的,因为你认为的“构造函数”前面都有void,但构造函数是不容许加返回类型的,所以你写的那些就全变成类的普通方法了。你现在的是:真正的构造函数是用默认的,也就是空的。
注意:去掉void后,你必须拿掉:
super.Animal(); 和 fh.Fish(); 因为他们已经不是类的成员方法了。

构造函数是在类实例化(创建新的对象)时候被调用的。
根据你的原来意思,可能最后的代码是:
class Animal
{
    int height,weight;
    Animal()
    {
        System.out.println("Animal construct");
    }
}

class Fish extends Animal
{
    int height;
    Fish()
    {
        System.out.println("Fish construct");
    }
}

class Integration
{
    public static void main(String args[])
    {
        Fish fh=new Fish();
    }
}




Stanley Qian at Melboure, Australia
2006-2-14 05:25 PM#6
查看资料  访问主页  Blog  发短消息  Yahoo!  顶部
 
全职杀手王 (全职杀手王)
注册会员
Rank: 2
一般会员



UID 64617
精华 0
积分 63
帖子 59
金钱 63 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-6-8
状态 离线
[推荐阅读] 求助:php能不能判断一个网络上绝对地址的文件是否存在啊
没问题了,厉害,高手啊,能解释一下为什么吗?谢谢了!
2006-2-14 05:32 PM#7
查看资料  发短消息  QQ  顶部
 
全职杀手王 (全职杀手王)
注册会员
Rank: 2
一般会员



UID 64617
精华 0
积分 63
帖子 59
金钱 63 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-6-8
状态 离线
[推荐阅读] Php与逻辑学(1)
非常感谢stanleyqian的解答,我之所以犯这个错误,主要还是对类的构造方法这个概念了解的不透彻。
2006-2-14 08:53 PM#8
查看资料  发短消息  QQ  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.025265 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP