Re: [問題] 請問interface到底是做什麼用的?
[...]
(以下不負責任發言)
※Interface:
.以精神來看:
→ 一群未實作的方法,用來描述一個類別應有的特性或功能
.以程設來看:
→ 一個類別內的方法成員全部都是abstract method,我們稱這個類別為interface
※舉例:
.EventListener:java.util
→ 連一個方法都沒有的介面
→ 擁有很多子介面:ActionListener, ChangeListener, MouseListener, etc.
→ 組織已存在的事件聽取類別,讓所有的事件聽取類別都實作這個介面
.Component:java.awt
→ 實作介面:ImageObserver, MenuContainer, Serializable
.ImageObserver:有需求時,就以非同步方式更新指定畫面
.MenuContainer:所有和容器有關的選單都要實作此介面
.Serializable:
→ 一個可以序列地輸出至串流的標籤
→ 若此類別的設計可以滿足Serializable,就實作此介面
→ 本介面沒有任何欄位或方法
→ 成員方法:
.addMouseListener(MouseListener l):
→ 加入滑鼠事件聽取者
→ MouseListener是一個介面:必須實作之,程式才能運作
※Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class IntroduceInterface extends JFrame {
// 宣告一個label,加入一個滑鼠事件傾聽者,告知滑鼠事件已被觸發
// Note: Component是一個abstract class
Component label;
public static void main(String[] args) {
// 秀出視窗
new IntroduceInterface().setVisible(true);
}
public IntroduceInterface() {
// 創建一個label,它的文字是Text
// Note: Component是一個abstract class
// 我們以JLabel來創建這個Component
label = new JLabel("Text");
// 在label加入一個滑鼠事件傾聽者
// Note: addMouseListener的argument是一個interface
// 我們以MouseAdaper的過載來實作這個interface
label.addMouseListener(new MouseAdapter()
{
// 滑鼠點擊事件
public void mouseClicked(MouseEvent e)
{
// 印出訊息,告知使用者label被滑鼠點擊了
System.out.println("Label Clicked.");
}
}
);
// 在主panel上加入這個label
getContentPane().add(label);
}
}
※想說的話:
.Component是一個未確定的類別,我們不能確實它是label, button, list, etc.
所以Component是一個abstract class,其內容由子類別實作。
.MouseListener是一個介面,我們不能先行實作滑鼠點擊, 滑鼠進入, etc
這些事件要觸發哪些動作由程式設計師實作其內容。
.EventListener是一個空無一物的介面,它的角色可能只在類別圖上扮演重要的角
色,對於java的設計藍圖或草稿上可能極有貢獻,但是對於使用java的程式設計師
而言,用處卻不大 (不過在開發軟體的時候,將多個相同概念的東西組織成一個介
面,會是一個好主意)。
.Serializable是一個空無一物的介面,它的功能雖然只是辨視一個類別是否可以被
正確輸出至串流或輸入至物件,但是卻在io上扮演著極重要的角色。
--
珍惜現在擁有的一切
身外之物不一定能擁有一輩子...
--
〒作者:H45 來自:15-207.dorm.ncu.edu.tw
◎二進位的世界【140.115.50.50‧binary.csie.ncu.edu.tw】
討論串 (同標題文章)
完整討論串 (本文為第 21 之 33 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章