Discussion:
[問題] interface裡的attribute const?
(时间太久无法回复)
我要買車啦
2007-04-10 18:00:26 UTC
Permalink
interface Move
{
public int walk=1;
public int run=2;
public int jump=3;

public void moving(int move);

}

interface Hole
{
public void holing();
}

class Mouse implements Move,Hole
{
public void moving(int move)
{
switch(move)
{
case walk:
break;
case run:
break;
case jump:
break;
}
}

public void holing()
{
}
}

想請問雖然interface 裡面的變數
可以拿來當switch case的判斷
是不是因為它是自動設定interface裡面的attribute為const阿?


--

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.169.113.157
推 PsMonkey:這... 我看不懂問題... 有人可以幫補嗎?  04/11 02:00
splin
2007-04-10 18:11:20 UTC
Permalink
※ 引述《walm20 (我要買車啦)》之銘言:
: interface Move
: {
: public int walk=1;
: public int run=2;
: public int jump=3;
: public void moving(int move);
: }
: interface Hole
: {
: public void holing();
: }
: class Mouse implements Move,Hole
: {
: public void moving(int move)
: {
: switch(move)
: {
: case walk:
: break;
: case run:
: break;
: case jump:
: break;
: }
: }
: public void holing()
: {
: }
: }
: 想請問雖然interface 裡面的變數
: 可以拿來當switch case的判斷
: 是不是因為它是自動設定interface裡面的attribute為const阿?

是的

任何定義在interface中的global variable

在編譯時都會被自動補完成 public static final xxx XXXXX;

就算你前面什麼modifier都不加也會被補完

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.211.21
ArssertionError
2007-04-11 09:25:33 UTC
Permalink
在interface中

所有method都是抽象方法
public abstract
無論有無宣告 編譯時都會自動補上

所有類別屬性 都是常數
public static final
無論有無宣告 編譯時都會自動補上

以上

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.113.65.27
我要買車啦
2007-04-12 02:50:55 UTC
Permalink
※ 引述《DavyBlue (ArssertionError)》之銘言:
: 在interface中
: 所有method都是抽象方法
: public abstract
: 無論有無宣告 編譯時都會自動補上
: 所有類別屬性 都是常數
: public static final
: 無論有無宣告 編譯時都會自動補上
: 以上

在問一個問題
課本寫說
interface and abstract class不行建立參考
可是後面程式範例
有建立interface參考到一個繼承這interface的物件(implement這interface的 class)
先謝謝大家摟

--

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.68.127.14
!H45
2007-04-12 03:45:31 UTC
Permalink
※ 引述《walm20 (我要買車啦)》之銘言:
: ※ 引述《DavyBlue (ArssertionError)》之銘言:
: : 在interface中
: : 所有method都是抽象方法
: : public abstract
: : 無論有無宣告 編譯時都會自動補上
: : 所有類別屬性 都是常數
: : public static final
: : 無論有無宣告 編譯時都會自動補上
: : 以上
: 在問一個問題
: 課本寫說
: interface and abstract class不行建立參考
: 可是後面程式範例
: 有建立interface參考到一個繼承這interface的物件(implement這interface的 class)
: 先謝謝大家摟

問題點在於,你了解什麼叫作「建立參考」嗎?

是意指建立一個新的實體 istance
new Something();
//where Something is not an interface nor an abstract class


還是指某個 member field 的定義
Otherthing otherthing;
//where Otherthing is an interface or an abstract class


或者是指多型 Polymorphism
Otherthing otherthing = new Something();
// where Something is a class that implements Otherthing, and
// Otherthing is an interface

哪一道?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.205.85
淺水中
2007-04-12 04:28:19 UTC
Permalink
※ 引述《walm20 (我要買車啦)》之銘言:
: ※ 引述《DavyBlue (ArssertionError)》之銘言:
: : 在interface中
: : 所有method都是抽象方法
: : public abstract
: : 無論有無宣告 編譯時都會自動補上
: : 所有類別屬性 都是常數
: : public static final
: : 無論有無宣告 編譯時都會自動補上
: : 以上
: 在問一個問題
: 課本寫說
: interface and abstract class不行建立參考
: 可是後面程式範例
: 有建立interface參考到一個繼承這interface的物件(implement這interface的 class)
: 先謝謝大家摟
當你改寫完所有的abstract method後就可以建立instance
課本上面那個繼承至inteface的class一定改寫完了所有的abstract method
所以當然可以建立參考

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.105.36
ArssertionError
2007-04-12 11:20:30 UTC
Permalink
※ 引述《walm20 (我要買車啦)》之銘言:
: ※ 引述《DavyBlue (ArssertionError)》之銘言:
: : 在interface中
: : 所有method都是抽象方法
: : public abstract
: : 無論有無宣告 編譯時都會自動補上
: : 所有類別屬性 都是常數
: : public static final
: : 無論有無宣告 編譯時都會自動補上
: : 以上
: 在問一個問題
: 課本寫說
: interface and abstract class不行建立參考
: 可是後面程式範例
: 有建立interface參考到一個繼承這interface的物件(implement這interface的 class)
: 先謝謝大家摟
如果是你說的是new一個介面
可以透過Anonymous Inner Class(匿名內部類別)來達成
也就是說 其實建立的是實做interface的內部類別實體參考
像這樣
interface AA{
void A();
}
class B implements AA{
public static void main(String args){
B b = new AA(){
public void A(){
//do something here
};//這個分號記得加
}
public void A(){}
}


如果你說的是
介面 a = new 子類別();這樣
這只是多型的技巧

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.113.73.192
我要買車啦
2007-04-12 16:07:56 UTC
Permalink
※ 引述《H45 (!H45)》之銘言:
: ※ 引述《walm20 (我要買車啦)》之銘言:
: : 在問一個問題
: : 課本寫說
: : interface and abstract class不行建立參考
: : 可是後面程式範例
: : 有建立interface參考到一個繼承這interface的物件(implement這interface的 class)
: : 先謝謝大家摟
: 問題點在於,你了解什麼叫作「建立參考」嗎?
: 是意指建立一個新的實體 istance
: new Something();
: //where Something is not an interface nor an abstract class
: 還是指某個 member field 的定義
: Otherthing otherthing;
: //where Otherthing is an interface or an abstract class
: 或者是指多型 Polymorphism
: Otherthing otherthing = new Something();
: // where Something is a class that implements Otherthing, and
: // Otherthing is an interface
: 哪一道?

請問
class_type ref;
這個不是建立參考嗎?
還是宣告參考?
課本上(大概寫一下)
Interface A
{
...
}
class B implement A
{
..
}

main裡面
B b=new B();
A a=b; //
這行的意思?

這樣不算建立interface的參考嗎?

--

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.169.119.35
!H45
2007-04-12 17:48:26 UTC
Permalink
※ 引述《walm20 (我要買車啦)》之銘言:
: 這個不是建立參考嗎?
: 還是宣告參考?
: 課本上(大概寫一下)
: Interface A
: {
: ...
: }
: class B implement A
: {
: ...
: }
: main裡面
: B b=new B();
: A a=b; //
: 這行的意思?
: 這樣不算建立interface的參考嗎?

我的辭語能力不是很強
但看你寫出Code之後,之前的猜測都可以免除了

這段建立interface的參考是合法的
那行的意思就是把 a 的值設為 b

好吧,老實說我不知道你真正想問的是什麼....

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.205.85
海與你的故事
2007-04-13 06:42:40 UTC
Permalink
Post by splin
※ 引述《walm20 (我要買車啦)》之銘言:
: 這個不是建立參考嗎?
: 還是宣告參考?
: 課本上(大概寫一下)
: Interface A
: {
: ...
: }
: class B implement A
: {
: ...
: }
: main裡面
: B b=new B();
: A a=b; //
: 這行的意思?
: 這樣不算建立interface的參考嗎?
我的辭語能力不是很強
但看你寫出Code之後,之前的猜測都可以免除了
這段建立interface的參考是合法的
那行的意思就是把 a 的值設為 b
好吧,老實說我不知道你真正想問的是什麼....
我想原po想問的是
課本說, interface不能建立參考
但是原po認為"A a=b"不就是建立了interface的參考,此與課本之說有衝突

在下我是認為課本說的應該只是你不能寫A a = new A();
可能只是課本的中文表達方式沒說好吧
說清楚一點應該是無法建立interface的實體
--
┌─────◆KKCITY◆─────┐ ★  人人可架站,經營社群聯誼天地  ★
│ bbs.kkcity.com.tw │ 歡迎社團/班系/歌友/藝文創作/公益申請
└──《From:140.109.21.137 》──┘ 到 KKCity 開設自己喜愛的主題BBS站
--

Loading...