| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
学习型 ASP/PHP/ASP.NET 主机 35元/年全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
赛孚耐:软件保护加密专家身份认证令牌USB KEY  
共有 463 人关注过本帖
标题:这个程序为什么编译通不过?(关于构造函数调用的问题)
收藏  订阅  推荐  打印 
Grace_TT
Rank: 3Rank: 3
等级:中级会员
威望:1
帖子:324
积分:3344
注册:2005-12-21
这个程序为什么编译通不过?(关于构造函数调用的问题)

class Example
{
String str;
public Example()
{
str= "example";
}
public Example(String s)
{
str=s;
}
}
class Demo extends Example
{

}
class Test
{
public void f ()
{
Example ex = new Example("Good");
Demo d = new Demo("Good");//就是这里说找不到符号。
}
public static void main(String args[])
{
new Test().f();
}
}


错误提示:找不到符号。

谁知道为什么呀?

[此贴子已经被作者于2006-4-16 9:55:15编辑过]

搜索更多相关主题的帖子: Example  函数  构造  public  str  
2006-4-16 09:51
千里冰封
Rank: 12Rank: 12Rank: 12
来自:灌水之王
等级:版主
威望:155
帖子:28360
积分:4616
注册:2006-2-26

Demo d = new Demo("Good");
你在Demo类中没有定义一个带参数的构造函数啊
所以会找不到这个函数啊
你应该定义一下
class Demo extends Example{
public Demo(){

}
public Demo(String st){
super(st);
}
}

可惜不是你,陪我到最后
2006-4-16 10:10
Grace_TT
Rank: 3Rank: 3
等级:中级会员
威望:1
帖子:324
积分:3344
注册:2005-12-21

可是,如果我这样改的话,就能通过了:
Demo d = new Demo();

为什么?
2006-4-16 10:53
Grace_TT
Rank: 3Rank: 3
等级:中级会员
威望:1
帖子:324
积分:3344
注册:2005-12-21

还有,为什么我把它改成这样,也有错:
class Demo extends Example
{
public Demo()
{
super(String s);//需要 ')'
}
}
class Test
{
public void f ()
{
Example ex = new Example("Good");
Demo d = new Demo();
}
2006-4-16 11:42
zhouyao_14
Rank: 3Rank: 3
等级:中级会员
帖子:196
积分:2060
注册:2006-2-15

斑竹已经解释了啊 你的构造函数是无参的
Demo d = new Demo();当然就正确了
SUPER是调用父类怎么可以super(String s);写啊 

2006-4-16 12:36
Grace_TT
Rank: 3Rank: 3
等级:中级会员
威望:1
帖子:324
积分:3344
注册:2005-12-21

不是构造子类对象的时候,它先调用父类的无参构造函数吗,那我改成这样,程序编译出错的原因又是什么:
class Example
{
String str;
public Example()
{
str= "example";
System.out.println(str);

}
public Example(String s)
{
str=s;
System.out.println(str);
}
}
class Demo extends Example
{

public Demo( String s)
{


System.out.println(s);
}
}
class Test
{
public void f ()
{
Example ex = new Example("Good");
Demo d = new Demo();//找不到符号。
}
public static void main(String args[])
{
new Test().f();
}
}
2006-4-16 13:27
千里冰封
Rank: 12Rank: 12Rank: 12
来自:灌水之王
等级:版主
威望:155
帖子:28360
积分:4616
注册:2006-2-26

Demo d = new Demo();//找不到符号。
你定义有参数构造函数的话,编译器就不会为你写一个无参构造函数,所以你不能调用new Demo()
因为你没有定义这个构造函数,你得先定义一下能才用
class Demo extends Example{
public Demo(){

}
public Demo(String st){
super(st);
}
}
这样的 话就两个构造函数都可以用了

可惜不是你,陪我到最后
2006-4-16 13:39
Grace_TT
Rank: 3Rank: 3
等级:中级会员
威望:1
帖子:324
积分:3344
注册:2005-12-21

但是,它不是可以调用父类的无参构造函数吗?
2006-4-16 13:53
千里冰封
Rank: 12Rank: 12Rank: 12
来自:灌水之王
等级:版主
威望:155
帖子:28360
积分:4616
注册:2006-2-26

子类的无参构造函数都没有定义,怎么去调用父类无参????
Demo d = new Demo();//找不到符号。
你定义了public Demo(){}
这个构造函数吗?


可惜不是你,陪我到最后
2006-4-16 14:01
Grace_TT
Rank: 3Rank: 3
等级:中级会员
威望:1
帖子:324
积分:3344
注册:2005-12-21

你的意思是说,父类的无参构造函数是由子类的无参构造函数来调用的?
那为什么我把这个程序改成这样,它依然调用了父类的无参构造函数呢,此时的子类中我也没有定义无参构造函数呀:


class Example
{
String str;
public Example()
{
str= "example";
System.out.println(str);

}
public Example(String s)
{
str=s;
System.out.println(str);
}
}
class Demo extends Example
{

public Demo( String s)
{


System.out.println(s);
}
}
class Test
{
public void f ()
{
Example ex = new Example("Good");
Demo d = new Demo("Hello");
}
public static void main(String args[])
{
new Test().f();
}
}
2006-4-16 14:07
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.065943 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved