看板java
标 题Re: [问题] 请问interface到底是做什麽用的?
发信站中大资工二进位的世界 (Fri Apr 14 23:19:08 2006)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.ncu!news.csie.ncu!BinaryBBS
[...]
(以下不负责任发言)
※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】