最近讀到了介面,所以創了一個名叫Phone 的抽象類別、兩個分別叫SurfInternet
和Chat的介面,但編譯過程一直出現錯誤,說非static的方法不能被static的東西給關
聯,但我就是沒看到有東西被我用成static啊!拜託各位幫幫我。
interface SurfInternet
{
void SurfInternet(String WebName);
}
interface Chat
{
void Chat(String ToWhom);
}
abstract class Phone
{
int price;
abstract void expensive();
void PrintPrice()
{
System.out.println("Price="+price);
}
}
class Sony extends Phone implements SurfInternet,Chat
{
public Sony(int price,String WebName,String ToWhom)
{
this.price=price;SurfInternet(WebName);Chat(ToWhom);
}
public void Chat(String ToWhom)
{
System.out.println("Talking to "+ToWhom);
}
public void SurfInternet(String WebName)
{
System.out.println("Surfing "+WebName);
}
public void expensive()
{
System.out.println("It is so expensive!");
}
}
public class Test
{
public static void main(String[] args)
{
Sony sony=new Sony(10000,"yahoo","John");
Sony.expensive();
}
}
結果:
Test.java:42: error: non-static method expensive() cannot be referenced from a static context
Sony.expensive();
^
1 error
到底~~~﹍﹍
不知道我有沒有理解錯,介面比抽象類別還要更抽象簡潔,抽象類別是給和自己有關連的東西繼承的,
而介面只是要給他多個功能用而已。然後還是搞不懂這兩個東西到底有什麼實際用途,就算沒有這兩個東西
好像也不會怎樣,難道他們只是用來定義東西的嗎?
作者: luckyshin (大屁) 2015-09-26 16:57:00
Sony要改成sony
作者: luckyshin (大屁) 2015-09-26 17:21:00
跟Polymorphism有關, 然後也可以拿來實現多重繼承
作者:
LPH66 (-6.2598534e+18f)
2015-09-26 17:48:00當某個函式需要一個物件有某個函式時宣告「我收一個有某函式的物件」這件事即是靠 interface以 IArea 跟 Circle 的例子, 一個函式宣告它收 IArea 物件即表示它期望傳進來的物件有 area() 函式可以用那當你不只有 Circle 實作 IArea 時, 其他實作的 class的物件也能交給目標函式使用這就是 interface 這東西的精神: "物件要提供的介面"(這也是為什麼它會叫做 interface 介面的原因)介面跟抽象類別的差別在於介面只宣告我要有什麼介面抽象類別除介面外可能提供某幾個介面有預設行為
好像有點了解了,感謝那各位在寫程式的時候都是先定好interface後再寫其他的嗎?
作者:
ah7675 (阿毛)
2015-09-27 16:56:00interface == abstract class without properties