Discussion:
[問題] constructor error(extends時)
(时间太久无法回复)
arctanx
2007-04-16 12:13:53 UTC
Permalink
新手發問
這是課本後面習題

class A
{
int i;

public A(int i)
{
this.i=i;
}
}

public class Test extends A{
public static void main(String[] arg){
A aaa=new A(10);
System.out.println(aaa.i);
}
}


error message:
D:\java\debug>javac Test.java
Test.java:12: cannot find symbol
symbol : constructor A()
location: class A
public class Test extends A{
^
1 error

請問
為什麼有錯ㄚ? 先謝謝摟~

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.169.112.86
Alien
2007-04-16 13:14:38 UTC
Permalink
※ 引述《tanx (arctanx)》之銘言:
: 新手發問
: 這是課本後面習題
: class A
: {
: int i;
: public A(int i)
: {
: this.i=i;
: }
: }
: public class Test extends A{
: public static void main(String[] arg){
: A aaa=new A(10);
: System.out.println(aaa.i);
: }
: }
: error message:
: D:\java\debug>javac Test.java
: Test.java:12: cannot find symbol
: symbol : constructor A()
: location: class A
: public class Test extends A{
: ^
: 1 error
: 請問
: 為什麼有錯ㄚ? 先謝謝摟~

這問題該被收到精華區了吧? o_oa


child class 的 constructor 如果在起
初沒有用 super(....) 去 invoke parent class
的某 constructor, 就會被自動加入 invoke super()
(無參數 constructor)

由於你的 parent class 沒有提供無參數 constructor
所以出問題了.

解決方法我想已經有很大提示了, 自己試試吧

Alien

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.73.98.242
arctanx
2007-04-16 14:34:02 UTC
Permalink
※ 引述《adrianshum (Alien)》之銘言:
: ※ 引述《tanx (arctanx)》之銘言:
: : 新手發問
: : 這是課本後面習題
: : class A
: : {
: : int i;
: : public A(int i)
: : {
: : this.i=i;
: : }
: : }
: : public class Test extends A{
: : public static void main(String[] arg){
: : A aaa=new A(10);
: : System.out.println(aaa.i);
: : }
: : }
: : error message:
: : D:\java\debug>javac Test.java
: : Test.java:12: cannot find symbol
: : symbol : constructor A()
: : location: class A
: : public class Test extends A{
: : ^
: : 1 error
: : 請問
: : 為什麼有錯ㄚ? 先謝謝摟~
: 這問題該被收到精華區了吧? o_oa
: child class 的 constructor 如果在起
: 初沒有用 super(....) 去 invoke parent class
: 的某 constructor, 就會被自動加入 invoke super()
: (無參數 constructor)
: 由於你的 parent class 沒有提供無參數 constructor
: 所以出問題了.
: 解決方法我想已經有很大提示了, 自己試試吧
: Alien
請問
是不是我想的這樣
class Test
沒有定constructor
所以compile時會插入一個default constructor (無參數)
由於Test 繼承 class A
而這Test的 default constructor雖然沒內容
但是compile會自動呼叫 A的default constructor
而class A裡面由於沒有定義無參數的constructor
所以錯誤?

而只要在Test理定義一個constructor
內容去call super(參數)
這樣就OK?

不知道想的對不對

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.201.115
※ 編輯: tanx 來自: 59.112.201.115 (04/16 22:34)
!H45
2007-04-16 14:39:27 UTC
Permalink
※ 引述《tanx (arctanx)》之銘言:
: ※ 引述《adrianshum (Alien)》之銘言:
: : 這問題該被收到精華區了吧? o_oa
: : child class 的 constructor 如果在起
: : 初沒有用 super(....) 去 invoke parent class
: : 的某 constructor, 就會被自動加入 invoke super()
: : (無參數 constructor)
: : 由於你的 parent class 沒有提供無參數 constructor
: : 所以出問題了.
: : 解決方法我想已經有很大提示了, 自己試試吧
: : Alien
: 請問
: 是不是我想的這樣
: class Test
: 沒有定constructor
: 所以compile時會插入一個default constructor (無參數)
: 由於Test 繼承 class A
: 而這Test的 default constructor雖然沒內容
: 但是compile會自動呼叫 A的default constructor
: 而class A裡面由於沒有定義無參數的constructor
: 所以錯誤?
: 不知道想的對不對

大致正確,因為 class Test 沒有定義任何 constructor
所以 compiler 會自動在 class Test 中加一段:
Test() { super(); }

另外, A 已經定義了 constructor: A(int x)
所以 compiler 不會自動加 constructor: A() 進去

回過頭來看 Test 類別中的 Test() { super(); }
觀察這個 super(); 的行為....
因為 A() 未定義,所以 super() 會發生錯誤。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.205.85

Loading...