目錄
內部類
內部類定義
內部類的特點
匿名內部類
格式:
內部類的意義
實例
內部類
? ?● 把類定義在另一個類的內部,該類就被稱為內部類。
? ?● 如果在類 Outer 的內部再定義一個類 Inner,此時類 Inner 就稱為內部類 (或稱為嵌套類),而類 Outer 則稱為外部類(或稱為宿主類)。
內部類定義
內部類——就是位于外部類成員位置的類
特點:可以使用外部類中所有的成員變量和成員方法(包括private的)
class Outer {private int age = 20;class Inner {public void show() {System.out.println(age);}}}
內部類的特點
- 內部類仍然是一個獨立的類,在編譯之后內部類會被編譯成獨立 的.class文件,但是前面冠以外部類的類名和$符號。
- ?內部類不能用普通的方式訪問。內部類是外部類的一個成員,因此內部 類可以自由地訪問外部類的成員變量,無論是否為 private 的。
匿名內部類
? ?匿名內部類是一種特殊的局部內部類,它是通過匿名類實現接口。
格式:
new 接口名稱/抽象類名稱() {
重寫抽象方法;
}
注:在實際開發中,我們常常遇到這樣的情況:一個接口/抽象類的方法的某個實現方 式在程序中只會執行一次,但為了使用它,我們需要創建它的實現類。此時可以 使用匿名內部類的方式,可以無需創建新的類,減少代碼冗余。
public interface IA {abstract void fun1();}new IA() {@Override public void fun1() {System.out.println("匿名類實現fun1");}};
內部類的意義
1.封裝性
? ?將只有在某個類中使用的功能定義在內部中,并可以使用不同訪問權限修飾控制
2.實現多繼承 java是不支持多繼承的,多繼承有一個致命性的缺陷, 容易出現鉆石繼承結構,例如圖。
public class Father{public string powerul="市長";
}
publie class Mother{public string wealthy=" 百萬";
}
public class son {
class xtends Father extends Father{
}
c1ass xtends Mother extends Mother{
}
publie void sayHello(}{String father new xtends rather().powerul;String mother = new xtends Mother().wealthv;System.out.println("my father is:" + father + "my mother has:" + mother);}
}
實例(設置內部線程類)
//為我們發送按鈕注冊事件監聽button1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//獲取輸入的聊天內容String s = textField1.getText();if (s.length()==0) {JOptionPane.showMessageDialog(null, "聊天內容不能為空!");return;}//發送聊天內容try { //拼接聊天內容 把賬戶,發送時間,聊天內容s= account+" "+dataUntil.strdom(new Date())+"\n"+s+"\n";dataOutputStream.writeUTF(s);textField1.setText("");} catch (IOException ex) {JOptionPane.showMessageDialog(null, "發送失敗" );}}});//來到聊天窗口后,就會隨時有別的客戶端發送消息,在聊天窗口中,循環監聽來自服務器發送的消息new ReceiveThread().start();//啟動監聽線程}//創建接收服務器發送的消息的線程private class ReceiveThread extends Thread {boolean mark = true;@Overridepublic void run() {while (mark){//如果接收到消息就會傳入消息框中try {String s = dataInputStream.readUTF();textArea1.append(s);} catch (IOException e) {mark = false;}}}}
?
?