1抽象類 接口
1. 抽象類
java語言中,用abstract 關鍵字來修飾一個類時,這個類叫做抽象類,用abstract 關鍵字來修飾一個方法時,這個方法叫做抽象方法。格式如下:
abstract class abstractClass{ …} //抽象類
abstract returnType abstractMethod([paramlist]) //抽象方法
抽象類必須被繼承,抽象方法必須被重寫。抽象方法只需聲明,無需實現;抽象類不能被實例化,抽象類不一定要包含抽象方法。若類中包含了抽象方法,則該類必須被定義爲抽象類。
2. 接口
接口是抽象類的一種,只包含常量和方法的定義,而沒有變量和方法的實現,且其方法都是抽象方法。它的用處體現在下面幾個方面:
◇ 通過接口實現不相關類的相同行爲,而無需考慮這些類之間的關係。
◇ 通過接口指明多個類需要實現的方法。
◇ 通過接口瞭解對象的交互界面,而無需瞭解對象所對應的類。
1)接口的定義
接口的定義包括接口聲明和接口體。
接口聲明的格式如下:
[public] interface interfaceName[extends listOfSuperInterface] { … }
extends 子句與類聲明的extends子句基本相同,不同的是一個接口可有多個父接口,用逗號隔開,而一個類只能有一個父類。
接口體包括常量定義和方法定義
常量定義格式爲:type NAME=value; 該常量被實現該接口的多個類共享; 具有public ,final, static的屬性。
方法體定義格式爲:(具有 public和abstract屬性)
returnType methodName([paramlist]);
2)接口的實現
在類的聲明中用implements子句來表示一個類使用某個接口,在類體中可以使用接口中定義的常量,而且必須實現接口中定義的所有方法。一個類可以實現多個接口,在implements子句中用逗號分開。
3) 接口類型的使用
接口作爲一種引用類型來使用。任何實現該接口的類的實例都可以存儲在該接口類型的變量中,通過這些變量可以訪問類所實現的接口中的方法。
1. 內部類的定義和使用:
內部類是在一個類的內部嵌套定義的類,它可以是其它類的成員,也可以在一個語句塊的內部定義,還可以在表達式內部匿名定義。
內部類有如下特性:
◇ 一般用在定義它的類或語句塊之內,在外部引用它時必須給出完整的名稱.名字不能與包含它的類名相同。
◇ 可以使用包含它的類的靜態和實例成員變量,也可以使用它所在方法的局部變量。
◇ 可以定義爲abstract。
◇ 可以聲明爲private或protected。
◇ 若被聲明爲static,就變成了頂層類,不能再使用局部變量。
◇ 若想在Inner Class中聲明任何static成員,則該Inner Class必須聲明爲static。
例3-8 是一個說明內部類如何使用的例子,其中,定義了兩個內部類:MouseMotionHandler和MouseEventHandler,分別用來處理鼠標移動事件和鼠標點按事件。
【例3-8】
import java.awt.*;
import java.awt.event.*;
public class TwoListenInner {
private Frame f;
private TextField tf;
public static void main(String args[]) {
TwoListenInner that=new TwoListenInner();
that.go();
}
public void go() {
f=new Frame("Two listeners example");
f.add("North",new Label("Click and drag the mouse"));
tf=new TextField(30);
f.add("South",tf);
f.addMouseMotionListener(new MouseMotionHandler());
f.addMouseListener(new MouseEventHandler());
f.setSize(300,300);
f.setVisible(true);
}
public class MouseMotionHandler extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e){
String s="Mouse dragging:X="+e.getX()+"Y="+e.getY();
tf.setText(s);
}
}
public class MouseEventHandler extends MouseAdapter {
public void mouseEntered(MouseEvent e){
String s="The mouse entered";
tf.setText(s);
}
public void mouseExited(MouseEvent e){
String s="The mouse left the building";
tf.setText(s);
}
}
}
可以運行一下這個程序,看一看它的運行結果。當你將鼠標移入frame時,文本框中會出現:"The mouse entered";當你在frame中拖曳鼠標時,文本框中會出現:"Mouse dragging:X=64 Y=117";當鼠標離開文本框時,文本框中出現:"The mouse left the building"。
2. 匿名類的定義和使用:
匿名類是一種特殊的內部類,它是在一個表達式內部包含一個完整的類定義。通過對例6-7中go()部分語句的修改,我們可以看到匿名類的使用情況。
public void go() {
f=new Frame("Two listeners example");
f.add("North",new Label("Click and drag the mouse"));
tf=new TextField(30);
f.add("South",tf);
f.addMouseMotionListener(new MouseMotionHandler(){
/*定義了一個匿名類,類名沒有顯式地給出,只是該類是
MouseMotionHandler類的子類*/
public void mouseDragged(MouseEvent e){
String s="Mouse dragging:X="+e.getX()+"Y
="+e.getY();
tf.setText(s);
}
});
f.addMouseListener(new MouseEventHandler());
f.setSize(300,300);
f.setVisible(true);
}
3. 內部類的優缺點:
◇ 優點:節省編譯後產生的字節碼文件的大小
◇ 缺點:使程序結構不清楚【例3-8】
import java.awt.*;
import java.awt.event.*;
public class TwoListenInner {
private Frame f;
private TextField tf;
public static void main(String args[]) {
TwoListenInner that=new TwoListenInner();
that.go();
}
public void go() {
f=new Frame("Two listeners example");
f.add("North",new Label("Click and drag the mouse"));
tf=new TextField(30);
f.add("South",tf);
f.addMouseMotionListener(new MouseMotionHandler());
f.addMouseListener(new MouseEventHandler());
f.setSize(300,300);
f.setVisible(true);
}
public class MouseMotionHandler extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e){
String s="Mouse dragging:X="+e.getX()+"Y="+e.getY();
tf.setText(s);
}
}
public class MouseEventHandler extends MouseAdapter {
public void mouseEntered(MouseEvent e){
String s="The mouse entered";
tf.setText(s);
}
public void mouseExited(MouseEvent e){
String s="The mouse left the building";
tf.setText(s);
}
}
}
同學們可以運行一下這個程序,看一看它的運行結果。當你將鼠標移入frame時,文本框中會出現:"The mouse entered";當你在frame中拖曳鼠標時,文本框中會出現:"Mouse dragging:X=64 Y=117";當鼠標離開文本框時,文本框中出現:"The mouse left the building"。
2. 匿名類的定義和使用:
匿名類是一種特殊的內部類,它是在一個表達式內部包含一個完整的類定義。通過對例6-7中go()部分語句的修改,我們可以看到匿名類的使用情況。
public void go() {
f=new Frame("Two listeners example");
f.add("North",new Label("Click and drag the mouse"));
tf=new TextField(30);
f.add("South",tf);
f.addMouseMotionListener(new MouseMotionHandler(){
/*定義了一個匿名類,類名沒有顯式地給出,只是該類是
MouseMotionHandler類的子類*/
public void mouseDragged(MouseEvent e){
String s="Mouse dragging:X="+e.getX()+"Y
="+e.getY();
tf.setText(s);
}
});
f.addMouseListener(new MouseEventHandler());
f.setSize(300,300);
f.setVisible(true);
}
3. 內部類的優缺點:
◇ 優點:節省編譯後產生的字節碼文件的大小
◇ 缺點:使程序結構不清楚
java語言中,用abstract 關鍵字來修飾一個類時,這個類叫做抽象類,用abstract 關鍵字來修飾一個方法時,這個方法叫做抽象方法。格式如下:
abstract class abstractClass{ …} //抽象類
abstract returnType abstractMethod([paramlist]) //抽象方法
抽象類必須被繼承,抽象方法必須被重寫。抽象方法只需聲明,無需實現;抽象類不能被實例化,抽象類不一定要包含抽象方法。若類中包含了抽象方法,則該類必須被定義爲抽象類。
2. 接口
接口是抽象類的一種,只包含常量和方法的定義,而沒有變量和方法的實現,且其方法都是抽象方法。它的用處體現在下面幾個方面:
◇ 通過接口實現不相關類的相同行爲,而無需考慮這些類之間的關係。
◇ 通過接口指明多個類需要實現的方法。
◇ 通過接口瞭解對象的交互界面,而無需瞭解對象所對應的類。
1)接口的定義
接口的定義包括接口聲明和接口體。
接口聲明的格式如下:
[public] interface interfaceName[extends listOfSuperInterface] { … }
extends 子句與類聲明的extends子句基本相同,不同的是一個接口可有多個父接口,用逗號隔開,而一個類只能有一個父類。
接口體包括常量定義和方法定義
常量定義格式爲:type NAME=value; 該常量被實現該接口的多個類共享; 具有public ,final, static的屬性。
方法體定義格式爲:(具有 public和abstract屬性)
returnType methodName([paramlist]);
2)接口的實現
在類的聲明中用implements子句來表示一個類使用某個接口,在類體中可以使用接口中定義的常量,而且必須實現接口中定義的所有方法。一個類可以實現多個接口,在implements子句中用逗號分開。
3) 接口類型的使用
接口作爲一種引用類型來使用。任何實現該接口的類的實例都可以存儲在該接口類型的變量中,通過這些變量可以訪問類所實現的接口中的方法。
1. 內部類的定義和使用:
內部類是在一個類的內部嵌套定義的類,它可以是其它類的成員,也可以在一個語句塊的內部定義,還可以在表達式內部匿名定義。
內部類有如下特性:
◇ 一般用在定義它的類或語句塊之內,在外部引用它時必須給出完整的名稱.名字不能與包含它的類名相同。
◇ 可以使用包含它的類的靜態和實例成員變量,也可以使用它所在方法的局部變量。
◇ 可以定義爲abstract。
◇ 可以聲明爲private或protected。
◇ 若被聲明爲static,就變成了頂層類,不能再使用局部變量。
◇ 若想在Inner Class中聲明任何static成員,則該Inner Class必須聲明爲static。
例3-8 是一個說明內部類如何使用的例子,其中,定義了兩個內部類:MouseMotionHandler和MouseEventHandler,分別用來處理鼠標移動事件和鼠標點按事件。
【例3-8】
import java.awt.*;
import java.awt.event.*;
public class TwoListenInner {
private Frame f;
private TextField tf;
public static void main(String args[]) {
TwoListenInner that=new TwoListenInner();
that.go();
}
public void go() {
f=new Frame("Two listeners example");
f.add("North",new Label("Click and drag the mouse"));
tf=new TextField(30);
f.add("South",tf);
f.addMouseMotionListener(new MouseMotionHandler());
f.addMouseListener(new MouseEventHandler());
f.setSize(300,300);
f.setVisible(true);
}
public class MouseMotionHandler extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e){
String s="Mouse dragging:X="+e.getX()+"Y="+e.getY();
tf.setText(s);
}
}
public class MouseEventHandler extends MouseAdapter {
public void mouseEntered(MouseEvent e){
String s="The mouse entered";
tf.setText(s);
}
public void mouseExited(MouseEvent e){
String s="The mouse left the building";
tf.setText(s);
}
}
}
可以運行一下這個程序,看一看它的運行結果。當你將鼠標移入frame時,文本框中會出現:"The mouse entered";當你在frame中拖曳鼠標時,文本框中會出現:"Mouse dragging:X=64 Y=117";當鼠標離開文本框時,文本框中出現:"The mouse left the building"。
2. 匿名類的定義和使用:
匿名類是一種特殊的內部類,它是在一個表達式內部包含一個完整的類定義。通過對例6-7中go()部分語句的修改,我們可以看到匿名類的使用情況。
public void go() {
f=new Frame("Two listeners example");
f.add("North",new Label("Click and drag the mouse"));
tf=new TextField(30);
f.add("South",tf);
f.addMouseMotionListener(new MouseMotionHandler(){
/*定義了一個匿名類,類名沒有顯式地給出,只是該類是
MouseMotionHandler類的子類*/
public void mouseDragged(MouseEvent e){
String s="Mouse dragging:X="+e.getX()+"Y
="+e.getY();
tf.setText(s);
}
});
f.addMouseListener(new MouseEventHandler());
f.setSize(300,300);
f.setVisible(true);
}
3. 內部類的優缺點:
◇ 優點:節省編譯後產生的字節碼文件的大小
◇ 缺點:使程序結構不清楚【例3-8】
import java.awt.*;
import java.awt.event.*;
public class TwoListenInner {
private Frame f;
private TextField tf;
public static void main(String args[]) {
TwoListenInner that=new TwoListenInner();
that.go();
}
public void go() {
f=new Frame("Two listeners example");
f.add("North",new Label("Click and drag the mouse"));
tf=new TextField(30);
f.add("South",tf);
f.addMouseMotionListener(new MouseMotionHandler());
f.addMouseListener(new MouseEventHandler());
f.setSize(300,300);
f.setVisible(true);
}
public class MouseMotionHandler extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e){
String s="Mouse dragging:X="+e.getX()+"Y="+e.getY();
tf.setText(s);
}
}
public class MouseEventHandler extends MouseAdapter {
public void mouseEntered(MouseEvent e){
String s="The mouse entered";
tf.setText(s);
}
public void mouseExited(MouseEvent e){
String s="The mouse left the building";
tf.setText(s);
}
}
}
同學們可以運行一下這個程序,看一看它的運行結果。當你將鼠標移入frame時,文本框中會出現:"The mouse entered";當你在frame中拖曳鼠標時,文本框中會出現:"Mouse dragging:X=64 Y=117";當鼠標離開文本框時,文本框中出現:"The mouse left the building"。
2. 匿名類的定義和使用:
匿名類是一種特殊的內部類,它是在一個表達式內部包含一個完整的類定義。通過對例6-7中go()部分語句的修改,我們可以看到匿名類的使用情況。
public void go() {
f=new Frame("Two listeners example");
f.add("North",new Label("Click and drag the mouse"));
tf=new TextField(30);
f.add("South",tf);
f.addMouseMotionListener(new MouseMotionHandler(){
/*定義了一個匿名類,類名沒有顯式地給出,只是該類是
MouseMotionHandler類的子類*/
public void mouseDragged(MouseEvent e){
String s="Mouse dragging:X="+e.getX()+"Y
="+e.getY();
tf.setText(s);
}
});
f.addMouseListener(new MouseEventHandler());
f.setSize(300,300);
f.setVisible(true);
}
3. 內部類的優缺點:
◇ 優點:節省編譯後產生的字節碼文件的大小
◇ 缺點:使程序結構不清楚
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.