标题:这个程序为什么编译通不过?(关于构造函数调用的问题)
只看楼主
Grace_TT
Rank: 1
等 级:新手上路
威 望:1
帖 子:324
专家分:0
注 册:2005-12-21
 问题点数:0 回复次数:16 
这个程序为什么编译通不过?(关于构造函数调用的问题)

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-04-16 09:51
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
Demo d = new Demo("Good");
你在Demo类中没有定义一个带参数的构造函数啊
所以会找不到这个函数啊
你应该定义一下
class Demo extends Example{
public Demo(){

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

可惜不是你,陪我到最后
2006-04-16 10:10
Grace_TT
Rank: 1
等 级:新手上路
威 望:1
帖 子:324
专家分:0
注 册:2005-12-21
得分:0 
可是,如果我这样改的话,就能通过了:
Demo d = new Demo();

为什么?
2006-04-16 10:53
Grace_TT
Rank: 1
等 级:新手上路
威 望:1
帖 子:324
专家分:0
注 册:2005-12-21
得分:0 
还有,为什么我把它改成这样,也有错:
class Demo extends Example
{
public Demo()
{
super(String s);//需要 ')'
}
}
class Test
{
public void f ()
{
Example ex = new Example("Good");
Demo d = new Demo();
}
2006-04-16 11:42
zhouyao_14
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2006-2-15
得分:0 
斑竹已经解释了啊 你的构造函数是无参的
Demo d = new Demo();当然就正确了
SUPER是调用父类怎么可以super(String s);写啊 

2006-04-16 12:36
Grace_TT
Rank: 1
等 级:新手上路
威 望:1
帖 子:324
专家分:0
注 册:2005-12-21
得分:0 
不是构造子类对象的时候,它先调用父类的无参构造函数吗,那我改成这样,程序编译出错的原因又是什么:
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-04-16 13:27
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
Demo d = new Demo();//找不到符号。
你定义有参数构造函数的话,编译器就不会为你写一个无参构造函数,所以你不能调用new Demo()
因为你没有定义这个构造函数,你得先定义一下能才用
class Demo extends Example{
public Demo(){

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

可惜不是你,陪我到最后
2006-04-16 13:39
Grace_TT
Rank: 1
等 级:新手上路
威 望:1
帖 子:324
专家分:0
注 册:2005-12-21
得分:0 
但是,它不是可以调用父类的无参构造函数吗?
2006-04-16 13:53
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

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


可惜不是你,陪我到最后
2006-04-16 14:01
Grace_TT
Rank: 1
等 级:新手上路
威 望:1
帖 子:324
专家分:0
注 册:2005-12-21
得分:0 
你的意思是说,父类的无参构造函数是由子类的无参构造函数来调用的?
那为什么我把这个程序改成这样,它依然调用了父类的无参构造函数呢,此时的子类中我也没有定义无参构造函数呀:


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-04-16 14:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-57789-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.220574 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved